Problemas com Matrizes e Loop

4 respostas
S
Boa noite a todos! Estou trabalhando com matrizes e chego em um ponto onde tenho que trocar duas linhas de uma matriz de posição. Só que aparece um erro que segundo a minha lógica não era para acontecer, o código que estou usando é o que segue:
if (sistema [w][b] != 0) { // Verificando se o segundo elemento da primeira coluna é diferente de zero para fazer a troca de linhas.
          
          for (k = 0; k < sistema [0].length; k++) { // Loop que enche o vetor temporário com os valores da linha da matriz sistema onde foi encontrado o pivot = 0.
            
            tempLinha [k] = sistema [b + 1][k]; // A variável b guarda o valor da linha onde o pivot é zero para que ela seja copiada.
            //System.out.print(sistema[b][k] + " ");
            
          }
          
          for (k = 0; k < sistema.length; k++) { // Loop que susbstitui os valores da linha da matriz sistema onde foi encontrado o pivot = 0 pelos valores da linha onde foi encontrado um elemento diferente de 0.
            
            sistema [b + 1][k] = sistema [b][k];
            
          }
          
          for (k = 0; k < sistema [0].length; k++) { // Loop que completa a troca de linhas, fazendo com que o valor do vetor tempLinha passe para linha da matriz sistema que foi copiada para a linha onde o pivot = 0 foi encontrado.
            
           sistema [b][k] = tempLinha[k];
           System.out.println(sistema [b][k]);
            
          }
          
        } else {
            
            w++;
            
        }
O erro que acusa é:
java.lang.ArrayIndexOutOfBoundsException: 3 at MetodoGauss.triangular(MetodoGauss.java:48)
E fazendo os testes descobri que quando isolo como comentário essa parte do código o erro desaparece:
for (k = 0; k < sistema.length; k++) { // Loop que susbstitui os valores da linha da matriz sistema onde foi encontrado o pivot = 0 pelos valores da linha onde foi encontrado um elemento diferente de 0.
            
            sistema [b + 1][k] = sistema [b][k];
            
          }
Segundo a minha lógica ele não difere dos outros significativamente, usa inclusive os mesmos limites e variáveis. Eu mudei também a ordem de substituição das linhas e suponho que todo o problema esteja na parte:
sistema [b + 1][k] = sistema [b][k];
Mas ainda assim não consigo ver o motivo desse erro, suponho estar tudo certinho. Se alguém puder me ajudar sou grato desde já.

4 Respostas

r_Jovelli

Não seria:

for (k = 0; k < sistema[0].length; k++) { sistema [b + 1][k] = sistema [b][k];

Com índice sistema[0] como parâmetro no loop ???

S

[r.Jovelli:
]Não seria:

for (k = 0; k < sistema[0].length; k++) { sistema [b + 1][k] = sistema [b][k];

Com índice sistema[0] como parâmetro no loop ???

Na verdade o parâmetro é o tamanho da primeira linha da matriz bidimensional (linha X coluna).

sistema[0].length
S

Senhores, muito obrigado, consegui resolver o meu problema.
O erro estava em um outro loop, antes da parte que postei, que fazia com que já se chegasse ao limite do tamanho da matriz.
Muito grato.

magocebolinha

Então coloca [resolvido] no titulo do tópico! abraço! :slight_smile:

Criado 8 de abril de 2010
Ultima resposta 8 de abr. de 2010
Respostas 4
Participantes 3