Ceci est mon premier message de dépassement de pile, et je suis relativement nouveau à java
, donc je ne comprends peut-être pas certains des commentaires que vous me fournissez.ArrayIndexOutOfBoundsException lorsque j'essaie de trouver le déterminant d'une matrice/matrice 2D
Avec ce programme, je suis supposé trouver le déterminant d'une matrice récursivement avec une taille déterminée par l'utilisateur. Quand je le fais, mais je reçois cette erreur:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Determinant.Copy<Determinant.java:55>
at Determinant.det<Determinant.java:31>
at Determinant.main<Determinant.java:15>
Je comprends ce que cela signifie erreur, mais je ne comprends pas pourquoi ça se passe.
Voici les classes que je utilise (les deux printmatrix et la principale méthode ont été écrits par mon professeur, je devais terminer la copie et les méthodes DET):
import javax.swing.JOptionPane;
public class Determinant
{
public static void main(String args[])
{
String sizeStr = JOptionPane.showInputDialog("What size?");
int size = Integer.parseInt(sizeStr);
int[][] matrix = new int[size][size];
for(int i=0; i<size; i++)
for(int j=0; j<size; j++)
matrix[i][j] = (int)(Math.random()*40)-20;
printArray(matrix);
System.out.println("\nThe determinant = "+det(matrix));
}
public static int det(int[][] A)
{
int answer = 0;
int place = 0;
int[][] temp;
int[][] temp1;
if(A.length==1){
return(A[0][0]);
}
for(int i = 0; i<A.length; i++){
temp = new int[A.length-1][A[0].length-1];
temp1 = Copy(temp, i);
if(i%2==0){
place = 1;
}
else{
place = -1;
}
answer = answer + place * A[0][i] * det(temp1);
}
return answer;
}
public static int[][] Copy(int[][] B, int i)
{
int[][] C = new int[B.length-1][B.length-1];
for(int j = 1; j<B.length; j++){
for(int k = 0; k<B[0].length; k++){
if(k>i){
C[j-1][k-1]=B[j][k];
}
else{
C[j-1][k]=B[j][k];
}
}
}
return C;
}
public static void printArray(int[][] A)
{
for(int i=0; i<A.length; i++)
{
for(int j=0; j<A.length; j++)
{
int num = A[i][j];
if(num<-9)
System.out.print(" ");
else if(num<0||num>9)
System.out.print(" ");
else
System.out.print(" ");
System.out.print(A[i][j]);
}
System.out.println();
}
}
}
L'erreur se produit à l'instruction else dans Copier et temp1 = Copy(temp, i)
.
Je suis confus, comme si j ou k = 1, ne devrait pas être une position dans le tableau? Qu'est-ce que je rate?
http://stackoverflow.com/questions/5554734/what-causes-a-java-lang-arrayindexoutofboundsexception-and-how-do-i-prevent-it – Tunaki
Première ligne de copie, vous avez créé le nouvel élément de tableau plus petit que l'ancien (pas le seul problème) –
Je crois que vous essayez de copier le tableau 2D 'B', si vous définissez les limites de' C' de façon équivalente vous devriez corriger votre ligne 'int [] [] C = nouveau int [B.length-1] [B.length-1]; 'à int [] [] C = nouveau int [B.length] [B [0] .length];' –