我的程序由一個由二維數組組成的網格組成。 用戶輸入刪除網格的某些元素,留下空格。 我的問題是使空格上方的元素下拉。應用重力:2D陣列
原來我有一個數組來檢查一個空格是否爲空,如果是空格,那麼上面的元素將被刪除並重新創建,原來是空白的。
我的問題是,我用來做這個的數組是Left-> Right,Top-> Down(i ++,j ++),這讓我不得不重複整個代碼來獲得新建空白空間的問題。 (例如,如果我從第三行刪除了一些東西,第二行將會是空白的,但是我已經檢查過第二行了。
因爲這樣會非常不起作用(包括出現重重錯誤),所以我決定去做底部 - >頂部,右 - >左數組(i - ,j--),我的問題是,我得到一個數組越界的錯誤,即使我確保它不可能爲它去出界
下面是一段代碼,這是給問題
public static void dropBall(){
for (i =Settings.row-1;i>=0;i--){
for (j =Settings.col-1;i>=0 ; j--){
if (i <0||j<0)break;
if (Settings.grid[i+1][j]==666){
//checking if the space below has the 666 ID (666 ID equals to blank)
Settings.grid[i+1][j]=Settings.grid[i][j]; //Deleting the current blank
}
}
}
}
注: Settings.row and Settings.col
類似於something.lenght
,這意味着它們具有電網的長度,即使電網從0開始。
如何在這種情況下避免outofBounds錯誤?
_ 「Settings.row [...]是類似於something.lenght」 _。所以你在'length-1'開始'i',並且你正在做'grid [i + 1]'。因此,在if語句的第一次迭代中,這相當於'grid [length] [j]'。這就是爲什麼你會得到這個例外。 –
沒錯,我完全忘記底部真的沒有任何東西低於自身,或者至少沒有提及陣列中的任何東西 – Oak