2017-05-24 83 views
-5

不被顯示的出界異常和我的代碼仍然運行的Java不會趕上OutOfBounds異常

import java.util.*; 
import java.io.*; 

public class pr50 
{ 
    static String[] arr; 
    static int modes; 
    static int old; 
    static int[] nums; 

    public static void main(String[] args) throws IOException 
    { 
     Scanner in = new Scanner(new File("pr50.dat")); 
     int limit = in.nextInt(); 
     in.nextLine(); 
     for(int x = 0; x < limit; x++) 
     { 
     arr = in.nextLine().split(" "); 
     nums = new int[arr.length]; 
     for(int b = 0; b < arr.length; b++) 
     { 
      nums[b] = Integer.valueOf(arr[b]); 
     } 
     Arrays.sort(nums); 
     old = 0; 
     modes = 0; 
     for(int y = 0; y < nums.length; y++) 
     { 
      int current = nums[y]; 
      for(int c = 0; current == nums[y+c] && nums[y+c] < nums.length ; c++) 
      { 
       if(old < 1) 
        modes++; 
       else 
        old++; 
       current = nums[y+x]; 
      } 
     } 
     if(modes > 1) 
      System.out.println(modes + " MODES"); 
     else 
      System.out.println(modes + " MODE"); 
     } 
    } 
} 

下面是一個示例文件:

2 
56 77 66 22 33 55 66 66 66 
80 93 87 72 80 77 43 87 98 99 100 
+2

是的。這是一些代碼好吧。那麼你認爲問題在哪裏? – John3136

+0

如果它運行,那麼沒有例外。給出實際引發異常的示例輸入 –

+0

在循環的第二次迭代中,current == nums [y + c]將爲false,並且for循環將終止。將不會拋出OOB異常。 –

回答

1

的錯誤是在這裏:

for(int c = 0; current == nums[y+c] && nums[y+c] < nums.length ; c++) 

想一想,如果nums [y + c] 意味着nums [y],循環將至少運行一次nums.length但如果你的陣列中,最大的因素是大於或等於數組的長度,它永遠不會考慮nums[y+1],讓我們嘗試:

1 
1 2 3  //lenght = 3 
2 MODES 

因爲最大的元素,3 < 3是失敗,它不會在下一時間循環中運行nums[y+1],但如果鍵入:

1 
1 1 1 1 1 1 1 //lenght = 7 

最後一個元素是1和1 < 7,環路將運行下一個循環,並檢查NUMS [6 + 1]

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

所以爲了使它出現OutOfBoundsException,最大的元素必須小於行的長度(平均元素數)!

run: 
1 
0 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 
    at test.main(test.java:30) 
C:\Users\Fes Nguyen\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1 
BUILD FAILED (total time: 2 seconds) 
+0

對不起,因爲我必須編輯我的答案很多時間:D,我是新手! –

相關問題