public static void main (String[] args){
double infinity = Double.POSITIVE_INFINITY;
int num = 5;
double[][] W = {{0,1,infinity,1,5},{9,0,3,2,infinity},{infinity,infinity,0,4,infinity},{infinity,infinity,2,0,3},{3, infinity, infinity, infinity,0}}; //Weighted, directed graph
double[][] D = W;
double[][] P = new double[5][5];
for(int i=0; i < num; i++){ //This works, but it throws the exception in the middle of this
System.out.println("");
for(int j=0; j < num; j++){
System.out.print("P["+i+"]"+"["+j+"]: "+ (int)P[i][j] + ", ");
}
}
floyd2(num, W, D, P);
}
private static void floyd2 (int n, double W[][], double D[][], double P[][]){
int i, j, k;
for(i=0; i < n; i++){ //This does not work
for(j=0; j < n; i++){
P[i][j] = 0;
}
}
D = W;
for(k=0; k< n; k++){
for(i=0; i < n; i++){
for(j=0; j < n; j++){
if((D[i][k] + D[k][j]) < D[i][j]){
P[i][j] = k;
D[i][j] = D[i][k] + D[k][j];
}
}
}
}
//Output D
for(i=0; i < n; i++){
for(j=0; j < n; j++){
System.out.print("D["+i+"]"+"["+j+"]: "+ (int)D[i][j] + ", ");
}
}
//Output P
for(i=0; i < n; i++){
for(j=0; j < n; j++){
System.out.print("P["+i+"]"+"["+j+"]: "+ (int)P[i][j] + ", ");
}
}
}
Also, ich versuche, ein Array P passieren floyd2 und es hält mich ein arrayOutOfBoundsExeception geben und es nicht wie die erste for Schleife in floyd2. Was könnte mir möglicherweise ein Array außerhalb der Grenzen geben ?!ein Array Pass - Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
Wenn ich das Array P entferne, funktioniert der Code eigenständig.
EDIT: Stapelüberwachung -
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at com.company.Main.floyd2(Main.java:32)
at com.company.Main.main(Main.java:23)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Process finished with exit code 1
Fügen Sie den Stacktrace auf die Frage prüfen. [mcve] – xenteros
Verwenden Sie '' 'für (j = 0; j
Runcorn
Sie versuchen, einen Index zu verwenden, der nicht existiert. Ihr Debugger ist der schnellste Weg, um herauszufinden, wo und warum dies geschieht. –