Erro no programa de média móvel

5 respostas
T

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++;

5 Respostas

Filipe_Chagas

Qual é o erro?

B

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.

T

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

T

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.

fmad27

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);
Criado 2 de abril de 2009
Ultima resposta 3 de abr. de 2009
Respostas 5
Participantes 5