2014-02-16 39 views
0

我的程序應該評估對資本陣列的用戶輸入。它看起來像我不斷收到這樣的錯誤消息:Java代碼outOfBoundsException

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

任何人都可以幫忙嗎?

package Capitol; 
import java.util.Scanner; 

public class Capitol { 

    static Scanner input = new Scanner(System.in).useDelimiter("\r\n"); 
    public static void main(String[] args) { 
     int correctAnswer = 0; 
     String [][] grid = { 
       {"Alabama", "California", "Delaware", "Florida", "Georgia", 
       "Hawaii", "Idaho", "Kansas", "Lousiana", "Maryland", "New Mexico", "Oregon", 
       "Pennsylvania", "Rhode Island", "South Carolina", "Texas", "Utah", "Virgina", 
       "West Virginia"}, 
       {"Montgomery", "Sacramento", "Dover", "Tallahassee", "Atlanta", 
       "Honolulu", "Boise", "Topeka", "Baton Rouge", "Annapolis", "San Jose", "Salem", 
       "Harrisburg", "Providence", "Columbia", "Austin", "Salt Lake City", "Richmond", 
       "Charleston"}}; 

     for(int i = 0; i< grid.length; i++){ 
      System.out.println("What is the capital of ?"); 
      String capital = input.next(); 
      for(int k =0; k <20; k++){ 
       String answer = null; 
       grid[i][k] = answer; 


       if(capital.equalsIgnoreCase(answer)){ 
       correctAnswer ++; 
       System.out.println("Your answer is correct"); 
       } 
       else 
        System.out.println("The correct answer should be" + grid[i]); 
      } 

     } 
     System.out.println("The correct count is " + correctAnswer); 
    } 
} 
+0

請添加您獲得的堆棧跟蹤。 – watery

+1

在2d數組中,您可以獲取嵌套for循環的子數組長度。改變'k <20'爲'k

回答

2

你只需要在你的陣列行(0〜18指數)19個項目和您要在19日上班。

變化

for(int k =0; k <20; k++){ 

for(int k =0; k <19; k++){ 
+2

也許更好:'for(int k = 0; k watery

0

在你的子陣,特別是第一個,你只需要在這19個項目。因爲事實上,數組的索引是從零開始的,這意味着他們從零開始,你可用指數k是0 - 18.當你試圖使用19,你有一個ArrayIndexOutOfBoundsException,這基本上意味着你試圖訪問索引無效。

如果更改下面一行:

for(int k = 0; k < 20; k++) { 

這樣:

for(int k = 0; k < grid[i].length; k++) { 

它應該解決您的問題。你應該使用grid[i].length,而不只是一個硬編碼的數字,如19的原因是因爲,如果你改變了grid陣列,你的代碼會爲你適應,而不會忽略指數19 Whant代碼,grid[i].length做之後的任何條目,獲取當前的子數組,並檢索它的長度。這意味着即使子陣列長度不同,for循環也不會中斷。 (雖然爲了這個目的我是無法理解你爲什麼會想用不同大小的子陣列。)

希望這有助於。