Serg1i Posted December 6, 2019 at 03:28 PM Report Share #616798 Posted December 6, 2019 at 03:28 PM (edited) Olá malta programadora. Estou a tirar um curso de programação. Estava a fazer um exercício de matrizes para apresentar no ecrã a diagonal principal. Depois tentei fazer o mesmo mas para a diagonal secundária no entanto tive de recorrer a um ciclo if como podem ver em baixo: System.out.println(); System.out.print("Secondary diagonal: "); for (int i=0; i<n; i++){ for (int j=0; j<n; j++){ if(j+i == n-1){ System.out.print(matriz [i] [j] + " "); } } } Funciona mas pretendo fazer somente com ciclos for: A minha tentativa foi esta: System.out.println(); System.out.print("Secondary diagonal: "); for (int i=0; i<n; i++){ for (int j=n-1; j>=0; j--){ System.out.print(matriz[i+j][i+j] + " "); } } Imprime a diagonal secundária correctamente para o caso de uma matriz de 2x2 mas deu um erro de excepção -> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 2 Se for uma matriz 3x3 imprime a diagonal principal de cima para baixo e erro de excepção Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 Alguém me pode dar uma dica? Obrigado Edited December 6, 2019 at 04:27 PM by Serg1i Link to comment Share on other sites More sharing options...
antseq Posted December 6, 2019 at 05:02 PM Report Share #616799 Posted December 6, 2019 at 05:02 PM (edited) viva, basta seguir o seu código e simular os 2 ciclos para uma matriz (n=3) 3x3: i=0; j=2; print matriz[2][2] i=0; j=1; print matriz[1][1] i=0; j=0; print matriz[0][0] i=1; j=2; print matriz[3][3] Index 3 out of bounds for length 3 i=1; j=1; print matriz[2][2] i=1; j=0; print matriz[1][1] i=2; j=2; print matriz[4][4] Index 4 out of bounds for length 3 i=2; j=1; print matriz[3][3] Index 3 out of bounds for length 3 i=2; j=0; print matriz[2][2] cps, Edited December 6, 2019 at 05:03 PM by antseq Link to comment Share on other sites More sharing options...
Serg1i Posted December 6, 2019 at 05:03 PM Author Report Share #616800 Posted December 6, 2019 at 05:03 PM (edited) System.out.println(); System.out.print("Secondary diagonal: "); for (int i=0; i<n; i++){ for (int j=n-1; j>=0; j--){ System.out.print(matriz[i][j] + " "); i++; } } Foi esta a solução que cheguei. Se alguém tiver uma outra alternativa agradeço a partilha 4 minutos atrás, antseq disse: viva, basta seguir o seu código e simular os 2 ciclos para uma matriz (n=3) 3x3: i=0; j=2; print matriz[2][2] i=0; j=1; print matriz[1][1] i=0; j=0; print matriz[0][0] i=1; j=2; print matriz[3][3] Index 3 out of bounds for length 3 i=1; j=1; print matriz[2][2] i=1; j=0; print matriz[1][1] i=2; j=2; print matriz[4][4] Index 4 out of bounds for length 3 i=2; j=1; print matriz[3][3] Index 3 out of bounds for length 3 i=2; j=0; print matriz[2][2] cps, Obrigado pelo esclarecimento 🙂 Edited December 6, 2019 at 05:07 PM by Serg1i Link to comment Share on other sites More sharing options...
antseq Posted December 6, 2019 at 09:11 PM Report Share #616802 Posted December 6, 2019 at 09:11 PM (edited) 4 horas atrás, Serg1i disse: Foi esta a solução que cheguei. Se alguém tiver uma outra alternativa agradeço a partilha Viva, Estar a modificar a variável de um ciclo "for", a meio do procedimento para além do incremento (default já previsto) não é boa programação. Se é para incrementar a torto e a direito utiliza um Do/While, faz então os incrementos que quiseres e validas no fim. Sobre o seu problema, o mesmo pode ser simplificado num único "for": public static void main(String []args){ int n=3; int matrix[][]={ {1,2,3}, {4,5,6}, {7,8,9} }; System.out.println("Primary Diagonal"); for(int k=0; k<n; k++) System.out.print(matrix[k][k] + " "); System.out.println(""); System.out.println("Secondary Diagonal"); for(int k=0; k<n; k++) System.out.print(matrix[k][n-1-k] + " "); } Output: Primary Diagonal 1 5 9 Secondary Diagonal 3 5 7 cps, Edited December 6, 2019 at 09:11 PM by antseq Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now