2016-10-04 138 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] + ", "); 
     } 
    } 
} 

所以,我想传递一个数组p来floyd2它不断给我一个arrayOutOfBoundsExeception,它并不像第一for floyd2中的循环。什么可能会给我一个数组越界?!传递一个阵列 - 在线程异常“主要” java.lang.ArrayIndexOutOfBoundsException:5

如果我删除数组P,代码将自行运行。

编辑: 堆栈跟踪 -

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

粘贴堆栈跟踪的问题相同的变量。 [mcve] – xenteros

+1

使用'''为(j = 0; j Runcorn

+1

您试图使用不存在的索引。您的调试器是找到这种情况发生的最快途径。 –

回答

4

的问题是由于你的代码试图访问不存在的索引。请

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

你对你对因此造成ArrayIndexOutOfBoundsException循环语句增加,而不是j的更换你的代码,

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

2
 for(i=0; i < n; i++){ //This does not work 
    for(j=0; j < n; i++){ 
     P[i][j] = 0; 
    } 
    } 
在你的第二个循环

你有我++而不是J ++

1

堆栈跟踪说:

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) 

它的循环:

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

在这种循环,可以增加i两次。所以它变成n这就是5。在内部循环中更改为j++

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

必须

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

确保你增加你的(在这种情况下j)测试for循环

相关问题