Erro no programa de média móvel

Estou fazendo um programa que lê uma planilha do excel, armazena os dados em uma matriz feita a partir de um ArrayList de ArrayList. Neste programa eu pretendo fazer a média móvel dos valores presentes na planilha, por exemplo: o programa lê a primeira linha soma com a segunda e divide por dois, lê a segunda vai para a terceira soma e divide por dois, assim por diante.
O meu programa funciona para planilhas que formam matrizes (i x (i + 1)), por exemplo (5X6; 6x7 … e etc), mas infelizmente eu necessito da análise de uma planilha que forma uma matriz de (1800 x 256). Vocês saberiam o porque deste erro com esta matriz que não segue a regra???
Grata pela atenção!

Aí vai uma parte do programa:

else if (operacao == 10){

            int num = 0;

            num = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de números utilizados para a média móvel"));           
            
            ArrayList <String> SubEspc = new ArrayList <String> ();

            int j = 0;
         
            for (int a = 1; a < (matriz.get(j).size()); a++){
                double variavel = 0.0;
                for (int b = 1; b < matriz.size(); b++){
                    
                    if ( b < ((matriz.size())- (num - 1))){                      
                        
                         for(int i=0;i < num;i++){
                             variavel += Double.parseDouble(matriz.get(b+i).get(a).toString().replace(",","."));

                         }

                         double media = 0.0;
                         media = variavel/num;
                         SubEspc.add(String.format("%.2f", media));
                         variavel = 0.0;
                        
                    }
                }

                j++;
                
            }
                            
                 
            int d = 0;
            for (int a = 1; a < matriz.get(a).size(); a ++){
                for (int b = 1; b < matriz.size(); b++){
                    if (d < SubEspc.size()){
                        if (b < num){
                            matriz.get(b).set(a, "0");
                        }
                        else {
                            double Conta1 = 0.0;
                            double Conta2 = 0.0;
                            Conta1 = Double.parseDouble(matriz.get(b).get(a).toString().replace(",","."));
                            Conta2 = Double.parseDouble(SubEspc.get(d).toString().replace(",","."));
                            matriz.get(b).set(a, String.format("%.2f", (Conta2 - Conta1)));
                            d++;

Qual é o erro?

Tente separar o teu programa em várias partes para entender.

Eu recomendaria criar um método que somasse os dados de somente uma coluna.

Depois lá fora você chama esse método n vezes para a quantidade de colunas que tiver.

O erro do meu programa é o fato do mesmo só trabalhar com matrizes que possuem a característica de ( a x a+1, por exemplo: 5 x 6 ; 6 x 7 ; 7 x 8 ; 8 x 9 e etc…) e a matriz que eu desejo trabalhar é de 13 x 256. Poderia haver uma forma de eu preencher a minha matriz com zero para que ela pudesse ser 255 x 256??? Eu tentei mas não sei porque não consegui fazer isto.
Grata pela atenção!
Taís

Uma coisa que me confundo bastante é guardar dados que não são strings (ou seja, no seu caso são números) em um array de strings.

Só de ver esse monte de conversões me confundo todo.

Será que você poderia converter tudo primeiro para um outro array de doubles, e trabalhar com esse array de doubles?

E como foi notado acima pelo Bruno, será que seria possível você quebrar esse jeito de calcular? Eu não achei no seu programa por que é que você tem de calcular só para um array N por N+1. Tem alguma coisa errada que não consigo descobrir só de olhar rapidamente.

Tem algumas coisas esquisitas!

Primeiro você formata o número para string e guarda no ArrayList,
depois você recupera essa String, usa o replace para trocar ‘,’ por ‘.’
aí você converte para double de novo.

Procure usar como String apenas na hora de mostrar os valores.

Uma outra forma de formatar o double no final para mostrar é com o DecimalFormat


double d = 1.2345;
DecimalFormat df = new DecimalFormat("#.##");
String result =df.format(d);