Olá, pessoal!
Estou com dificuldade em resolver um exercício da faculdade em que
preciso gerar uma matriz na qual o usuário informe as dimensões. Depois
preciso preenchê-la com valores que o usuário vai informar. Quando
executo o programa, ele dá ArrayIndexOutOfBoundException quando vai
percorrer as colunas. Conseguem me ajudar a ver o que posso estar
fazendo de errado?
import java.util.Scanner;
public class SomaDasDiagonais {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int[][] matriz;
int[] tamanho = new int[2];
int soma = 0, i, j, n, m;
for(i = 0; i < 2; i++){
n = i + 1;
System.out.println("Informe a " + n + "ª dimensão da matriz:");
tamanho[i] = s.nextInt();
}
matriz = new int[tamanho[0]][tamanho[1]];
for(i = 0; i < matriz.length; i++){
n = i + 1;
System.out.println(n);
for(j = 0; j < matriz[tamanho[0]].length; j++){
m = j = 1;
System.out.println("Informe o valor de " + n + "." + m +
" na matriz:");
matriz[i][j] = s.nextInt();
}
}
s.close();
i = 0;
j = 0;
while(i < matriz.length && j < matriz[tamanho[1]].length){
soma += matriz[i][j];
i++;
j++;
}
i = 0;
j = (matriz[tamanho[i]].length - 1);
while(i < matriz.length && j > 0){
soma += matriz[i][j];
i++;
j--;
}
System.out.println("A soma das diagonais principal e secundária é " + soma);
}
Obrigado desde já, pessoal!
Tem problemas neste loop
for(i = 0; i < matriz.length; i++){
n = i + 1;
System.out.println(n);
for(j = 0; j < matriz[tamanho[0]].length; j++){
m = j = 1;
System.out.println("Informe o valor de " + n + "." + m +
" na matriz:");
matriz[i][j] = s.nextInt();
}
}
Teria q ser i < tamanho[0] e j < tamanho[1].
Também m = j = 1 n faz sentido aí então seria
System.out.println("Informe o valor de " + i + "." + j +
" na matriz:");
Neste loop
while(i < matriz.length && j < matriz[tamanho[1]].length){
soma += matriz[i][j];
i++;
j++;
}
acho q seria
while(i < tamanho[0] && j < tamanho[1]) {
E aqui também
j = (matriz[tamanho[i]].length - 1);
while(i < matriz.length && j > 0){
soma += matriz[i][j];
i++;
j--;
}
Acho q seria
j = tamanho[1] - 1;
while(i < tamanho[0] && j > 0){
Cara, eu já tinha conseguido resolver e era bem o que você falou. Mas muito obrigado pela disposição em ajudar, mesmo assim, poucas pessoas em fóruns BR estão dispostas a ajudar. Obrigado mesmo!
Meu código ficou assim:
import java.util.Scanner;
public class SomaDasDiagonais {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int[][] matriz;
int[] tamanho = new int[2];
int soma = 0, i, j, n, m;
for(i = 0; i < 2; i++){
n = i + 1;
System.out.println("Informe a " + n + "ª dimensão da matriz:");
tamanho[i] = s.nextInt();
}
matriz = new int[tamanho[0]][tamanho[1]];
for(i = 0; i < tamanho[0]; i++){
n = i + 1;
System.out.println(n);
for(j = 0; j < tamanho[1]; j++){
m = j + 1;
System.out.println("Informe o valor de " + n + "." + m +
" na matriz:");
matriz[i][j] = s.nextInt();
}
}
s.close();
i = 0;
j = 0;
while(i < tamanho[0] && j < tamanho[1]){
soma += matriz[i][j];
i++;
j++;
}
i = 0;
j = (tamanho[1] - 1);
while(i < tamanho[0] && j > -1){
soma += matriz[i][j];
i++;
j--;
}
System.out.println("A soma das diagonais principal e secundária é " + soma);
}
}
E outra, pra te facilitar você não precisava daquele for la em cima pra pegar os dados do usuário, não havia necessidade, visto que a classe Scanner não necessita disso só uma dica.