2015-10-05 150 views
2

我收到錯誤消息後,我進入退出它說數組索引越界的異常:2

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 

林可怕在編程所以請與我裸露

import java.util.*; 

public class Highway{ 

    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 

     System.out.println("Total number of the exits"); 
     int p=input.nextInt(); 
     System.out.println("The first exit"); 
     int i=input.nextInt(); 
     System.out.println("The second exit"); 
     int j=input.nextInt(); 

     int[]A= new int[p]; 

     for(int w=0;w<=p;i++) { 


      A[i]=(int)(java.lang.Math.random() * 20 + 1); 
      System.out.println(A[w]); 
     } 
    } 

    static void Distance(int i, int j, int[] A) { 
    // a is the array of distance 
    // this find the distances between i and j 
     int distance = 0; 

     if(j>i){ 
     for(int k = i; k<=j;k++) { 

       distance=distance+A[k]; 
     } 

       distance=distance-A[i]; 

     } 

     if(i>j){ 
      for (int m = j; m<=i; m++){distance=distance+A[m]; 
      } 
       distance=distance-A[j]; 
      } 

      System.out.println("The distance of the first"+i+" and second exit"+j+" is"+distance); 

     } 
} 
+1

這裏是堆棧跟蹤? –

+0

另外,你有沒有嘗試單步執行代碼來查看哪一行會引發異常? – KornMuffin

回答

4

你的循環重複,直到p包容,這就是你得到錯誤的地方! 數組的大小是p,您應該迭代的索引是0,...,p-1加上您正在增加i而不是w

修改:

for(int w=0;w<=p;i++) 

到:

for(int w=0;w<p;w++) 
2

更改您的for循環以下

for(int w=0;w<p;w++) { 


     A[w]=(int)(java.lang.Math.random() * 20 + 1); 
     System.out.println(A[w]); 
    } 

唯一的變化我在這裏做是在爲條件,因爲如果大小的數組是p,那麼可以在0,1,...,p-1訪問數組值。此外,您還需要增加w,而不是i在for循環

此外,該陣列中要更新的A[i]代替A[w]

+0

@alfasin在回答'w'沒有得到增加。此外,用戶正在更新'A [i]'然後打印'A [w]',這將再次向他顯示類似的錯誤。 –

+0

你是對的 - 趕上! – alfasin

+0

@alfasin希望這個爲他人澄清以及:) –