2016-10-04 2 views
0
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 
+0

Fügen Sie den Stacktrace auf die Frage prüfen. [mcve] – xenteros

+1

Verwenden Sie '' 'für (j = 0; j Runcorn

+1

Sie versuchen, einen Index zu verwenden, der nicht existiert. Ihr Debugger ist der schnellste Weg, um herauszufinden, wo und warum dies geschieht. –

Antwort

4

Das Problem war, um Ihren Code auf Grund versuchen Index zuzugreifen, die nicht existiert. Bitte ersetzen Sie den Code,

for(j=0; j < n; i++){ 
    P[i][j] = 0; 
} 

mit

for(j=0; j < n; j++){ 
    P[i][j] = 0; 
} 

Sie steigen i statt j auf für so -Schleifenanweisungen verursacht ArrayIndexOutOfBoundsException.

2
 for(i=0; i < n; i++){ //This does not work 
    for(j=0; j < n; i++){ 
     P[i][j] = 0; 
    } 
    } 

in Ihrem zweiten Schleife Sie haben i ++ anstelle von j ++

1

Die stacktrace sagt:

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) 

Es ist die Schleife:

for(i=0; i < n; i++){ //This does not work 
     for(j=0; j < n; i++){ 
      P[i][j] = 0; 
     } 
    } 

In dieser Schleifen, Sie i erhöhen zweimal. So wird es n, die 5 ist. Wechseln Sie in der inneren Schleife zu j++.

1
for(i=0; i < n; i++){ //This does not work 
    for(j=0; j < n; i++){ 
     P[i][j] = 0; 
    } 
} 

benötigt

for(i=0; i < n; i++){ 
    for(j=0; j < n; j++){ 
     P[i][j] = 0; 
    } 
} 

stellen Sie sicher, die gleiche Variable erhöht werden Sie in der for-Schleife (j in diesem Fall)

Verwandte Themen