Viva… Modifiquei assim o código:
public static int[][] preenximento(int n) {
Scanner ler = new Scanner(System.in);
int[][] mat = new int[n][n];
int i = 0, k = 0;
System.out.println("Preenximento da matriz quadrada:");
for (i = 0; i < mat.length-1; i++) {
System.out.println("Insira um valor para a posição [" + i + "][" + k + "] da matriz: ");
mat[i][k] = ler.nextInt();
for (k = 0; k < mat[i].length-1; k++) {
System.out.println("Insira um valor para a posição [" + n + "][" + k + "] da matriz: ");
mat[i][k] = ler.nextInt();
}
}
return mat;
}
e o output foi este:
[list]debug:
Insira a capacidade de linhas/colunas da matriz quadrada:
3
Preenximento da matriz quadrada:
Insira um valor para a posição [0][0] da matriz:
8
Insira um valor para a posição [3][0] da matriz:
4
Insira um valor para a posição [3][1] da matriz:
9
Insira um valor para a posição [1][2] da matriz:
5
Insira um valor para a posição [3][0] da matriz:
4
Insira um valor para a posição [3][1] da matriz:
1
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 3
at PL7exComp1.colunas(PL7exComp1.java:109)
at PL7exComp1.verificacao(PL7exComp1.java:45)
at PL7exComp1.main(PL7exComp1.java:13)
Java Result: 1
[/list]
Mas eu não me conformo, porque o a matriz tem capacidade de linhas = colunas = 3 e as posições vão do 0 a 2 (0, 1, 2) e o programa pede-me para preencher a matriz em posições do género de [3][0] quando os indices só vão de 0, 1 e 2 no máximo.
Até neste ciclo for:
for (i = 0; i < mat.length-1; i++) { o i começa em ZERO e é menor que o comprimento-1, ou seja, i<3-1 que origina i<2 e o array assim só vai de 0 a 1 porque nunca se irá igualar a dois. Por isso acho que está mal e devia ser como eu meti no primeiro post deste tópico onde tenho:
for (i = 0; i < mat.length; i++) { porque aí sei que o i=0 vai até i<3, ou seja 0, 1, 2.
Podem ajudar? abraço
até vou postar o programa todo, porque pode ser que o problema esteja noutro local. Peço desculpa pelo tamanho da resposta:
import java.util.Scanner;
public class PL7exComp1 {
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
System.out.println("Insira a capacidade de linhas/colunas da matriz quadrada: ");
int n = ler.nextInt();
int[][] m = new int[n][n];
boolean flag;
m = preenximento(n);
flag = verificacao(m, n);
if (flag == true) {
System.out.println("A matriz é um quadrado mágico!");
} else {
System.out.println("A matriz não é um quadrado mágico!");
}
}
public static int[][] preenximento(int n) {
Scanner ler = new Scanner(System.in);
int[][] mat = new int[n][n];
int i = 0, k = 0;
System.out.println("Preenximento da matriz quadrada:");
for (i = 0; i < mat.length-1; i++) {
System.out.println("Insira um valor para a posição [" + i + "][" + k + "] da matriz: ");
mat[i][k] = ler.nextInt();
for (k = 0; k < mat[i].length-1; k++) {
System.out.println("Insira um valor para a posição [" + n + "][" + k + "] da matriz: ");
mat[i][k] = ler.nextInt();
}
}
return mat;
}
public static boolean verificacao(int[][] m, int n) {
int[] linhas = new int[n];
int[] colunas = new int[n];
int[] diagonais1 = new int[n];
int[] diagonais2 = new int[n];
int vlinhas=0, vcolunas=1, vdiagonais1=2, vdiagonais2=3;
boolean flagLinhas = true, flagColunas = true, flagDiagonais1 = true, flagDiagonais2 = true, flag = false;
linhas = linhas(m, n);
colunas = colunas(m, n);
diagonais1 = diagonais1(m, n);
diagonais2 = diagonais2(m, n);
//verificação das linhas
for (int i = 0; i < linhas.length; i++) {
for (int j = i + 1; j < linhas.length; j++) {
if (linhas[i] != linhas[j]) {
flagLinhas = false;
}
}
vlinhas=linhas[i];
}
//verificação das colunas
for (int k = 0; k < colunas.length; k++) {
for (int j = k + 1; j < colunas.length; j++) {
if (colunas[k] != colunas[j]) {
flagColunas = false;
}
}
vcolunas=colunas[k];
}
//verificação das diagonais1
for (int k = 0; k < diagonais1.length; k++) {
for (int z = k + 1; z < diagonais1.length; z++) {
if (diagonais1[k] != diagonais1[z]) {
flag = false;
}
}
vdiagonais1=diagonais1[k];
}
//verificação das diagonais
for (int k = diagonais2.length; k <= 0; k--) {
for (int z = diagonais2.length - 1; z <= 0; z--) {
if (diagonais2[k] != diagonais2[z]) {
flag = false;
}
}
vdiagonais2=diagonais2[k];
}
if(flagLinhas==true && flagColunas==true && flagDiagonais1==true && flagDiagonais2==true){
if(vlinhas==vcolunas && vlinhas==vdiagonais1 && vlinhas==vdiagonais2){
flag= true;
}
}
return flag;
}
public static int[] linhas(int[][] m, int n) {
boolean flag = true;
int[] linhas = new int[n];
//linhas
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
linhas[j] = m[i][j];
}
}
return linhas;
}
public static int[] colunas(int[][] m, int n) {
boolean flag = true;
int[] colunas = new int[n];
int i = 0;
//colunas
for (int j = 0; j < m[i].length; j++) {
for (i = 0; i < m.length; i++) {
colunas[j] = m[i][j];
}
}
return colunas;
}
public static int[] diagonais1(int[][] m, int n) {
boolean flag = true;
int[] diagonais1 = new int[n];
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
if (i == j) {
diagonais1[i] = m[i][j];
}
}
}
return diagonais1;
}
public static int[] diagonais2(int[][] m, int n) {
boolean flag = true;
int[] diagonais2 = new int[n];
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
if (i == j) {
diagonais2[i] = m[i][j];
}
}
}
return diagonais2;
}
}
Abraço