2015-10-17 48 views
-1

我試圖訪問數組的下一個元素,但它說我超出了界限。爲什麼我的數組超出界限?

private void board(Scanner file) { 
    String[][] board = new String[r][c]; //r=25 c=75 
    int col = 0; 
    for(int row = 0; file.hasNextLine() && row<r ; row++){ 
     board[row]=file.nextLine().split(""); 
     neighbors(board,row,col); 
     col++; 
     System.out.println(file.next()); 
    } 

} 

private void neighbors(String[][] board, int row, int col) { 
    if(col<c && "X".equals(board[row][col+1])){//right 
     neighbors++; 
     System.out.println(neighbors); 
    } 

} 
+1

*,其中* AR你走出界限? – user3553031

+0

我的鄰居方法,當我檢查一個鄰居的權利 –

+1

如果你的col在右邊沒有鄰居怎麼辦?你有沒有想過這個? –

回答

0

在行if(col<c && "X".equals(board[row][col+1])){,首先確保col小於陣列中的列數,但你嘗試了數組取消引用在col+1。如果col已經是c-1,那麼col+1是無效的數組索引,這將導致引發ArrayIndexOutOfBoundsException

+0

好吧,我想我明白了,所以我想找到col值然後比較它,所以它沒有得到兩次比較? –

+0

這個問題與你使用'col'多少次無關。你正在檢查'col'是否在界限內 - 很好。但是你並沒有使用'col'作爲數組索引;你正在使用'col + 1'。即使'col'在界限內,'col + 1'也可能不是。你可能想驗證一下'c!= 0 && col user3553031

+0

我知道c!= 0,它的終點是75. –

0

board[row]=file.nextLine().split(""); 此行將使新陣「任何長度取決於由file.nextLine()split()返回行」,所以board[row]現在引用數組,其長度可以不等於C,我覺得你的split("")將返回尺寸1的陣列

這樣反而比較col < c使用col < board[row].length ; 也重新考慮你的split("")例如,如果行是1 2 3 可以使用split(" ");

+0

即時分割,這就是我選擇「」的原因,因爲它不是空間。那麼這是不正確的? –

+0

例如第一行可能是............................. xxxxxxxxxxxxxxx.xxxxxxxxxxx.xxxx等 –

+0

在您給出的示例中你期望從split()得到的元素是什麼,如果是的話你應該使用'split(「),它是{xxxxxxxxxx,x,x,x,x,x,x,xxxxx,x,.......等等}。 「);' –

相關問題