2013-04-24 46 views
1

我的程序符合規定越界異常,但是當我運行它,它給了我一個「數組越界異常的指數走出」數組索引使用的Integer.parseInt

public void readBoard(String filename) throws Exception { 
    File f = new File("myBoard.csv"); 
    Scanner reader = new Scanner(f); 
    while(reader.hasNext()){ 
     String line = reader.nextLine(); 
     String [] b = line.split(","); 
     String type = b[0]; 
     int i = Integer.parseInt(b[1]); 
     int j = Integer.parseInt(b[2]); 
     if(type.equals("Chute")) 
      board[i][j] = new Chute(); 
     else if(type.equals("Ladder")) 
      board[i][j] = new Ladder(); 
} 

誤差以int i =整數。 parseInt函數(b [1]);我的問題是我把String [1]和[2]變成int的方式是否正確?我想這不是因爲我有一個數組越界異常。我猜這意味着它指向該地區的現場,沒有任何東西。

回答

1

IndexOutOfBounds確實意味着您正試圖訪問數組中不存在的元素。添加:

System.out.println("array size = " + b.length); 

查看數組實際是多長時間。你期望你的數組的長度爲3,但是根據實際讀取的行和你分割它的方式,你看起來有一個長度爲1的數組。它也有助於看到你的實際行試圖分裂。

試試這個:

public void readBoard(String filename) throws Exception{ 
    File f = new File("myBoard.csv"); 
    Scanner reader = new Scanner(f); 
    while(reader.hasNext()){ 
     String line = reader.nextLine(); 

     // What line do we intend to process? 

     System.out.println("Line = " + line); 

     String [] b = line.split(","); 

     // How long is the array? 

     System.out.println("Array length = " + b.length); 

     String type = b[0]; 
     int i = Integer.parseInt(b[1]); 
     int j = Integer.parseInt(b[2]); 
     if(type.equals("Chute")) 
      board[i][j] = new Chute(); 
     else if(type.equals("Ladder")) 
      board[i][j] = new Ladder(); 
    } 

每當你在代碼開發的過程中的時候,你要添加傾倒各個領域的價值,幫助你看到你在做什麼調試語句。在這裏和那裏用幾個關鍵的調試語句來添加代碼會幫助你調整你的假設(即「我的數組有三個元素」)和實際正在發生的事情(即「我的數組只有一個元素」)。

+0

Ohhhhhhhhh,這有幫助!謝謝。打印出陣列的大小很有幫助。它證明了這個數組的大小是1而不是3.現在我看到問題在哪裏,方法正在調用的文件中。非常感謝! – 2013-04-24 23:58:35

+0

很高興爲您服務。灑水很有趣,並有助於您的代碼增長。這是最基本的調試技術,只要您繼續編碼,就會爲您提供服務。只記得在發佈版本中刪除調試語句,或者你總是可以打包調試語句。在你的類中創建一個名爲DEBUG的最終靜態布爾變量,然後當你需要撒上時,只需使用if(DEBUG)System.out.println(「myVar」+ myVar); – MarsAtomic 2013-04-25 00:02:18

1

確保行分割工作正常,你有3個不同的字符串o.w. b [1]或b [2]應該導致錯誤。進行打印或調試以查看b [0]的值是多少。

1

試試這個吧,因爲它是越界由於數組大小爲1,你應該跳過所有陣列與1

public void readBoard(String filename) throws Exception { 
    File in = new File("myBoard.csv"); 
    Scanner reader = new Scanner(in); 
    while (reader.hasNext()) { 
     String line = reader.nextLine(); 
     String[] b = line.split(","); 
     if (b.length != 1) { 
      String type = b[0]; 
      int i = Integer.parseInt(b[1]); 
      int j = Integer.parseInt(b[2]); 
      if (type.equals("Chute")) 
       board[i][j] = new Chute(); 
      else if (type.equals("Ladder")) 
       board[i][j] = new Ladder(); 
     } 
    } 
} 
0

大小while循環之前做到這一點

reader.nextLine[]; 

因爲文件的第一行只有一個元素。