2014-01-06 94 views
0

我的程序由一個由二維數組組成的網格組成。 用戶輸入刪除網格的某些元素,留下空格。 我的問題是使空格上方的元素下拉。應用重力: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錯誤?

+1

_ 「Settings.row [...]是類似於something.lenght」 _。所以你在'length-1'開始'i',並且你正在做'grid [i + 1]'。因此,在if語句的第一次迭代中,這相當於'grid [length] [j]'。這就是爲什麼你會得到這個例外。 –

+0

沒錯,我完全忘記底部真的沒有任何東西低於自身,或者至少沒有提及陣列中的任何東西 – Oak

回答

0
  • 在3號線:

      for (j =Settings.col-1;i>=0 ; j--){ 
    

變化:

   for (j =Settings.col-1;j>=0 ; j--){ 
  • ,您可以後刪除if線。從第二行底部

    public static void dropBall(){ 
        for (i =Settings.row-1;i>=0;i--){ 
         for (j =Settings.col-1;j>=0 ; j--){ 
          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.grid[i][j] = 666; 
          } 
         } 
        } 
    } 
    
+0

這是真的,根據if語句,我有些困惑,所以我制定了限制來防止它,第三行'i> = 0',這很可能是由於從++切換到 - (第50次),但老實說我沒有看到它。 按照在'Settings.row-2'上啓動'i'那麼明顯和簡單,我覺得自己笨到忘了這麼做,而是試圖創建50行來防止一個錯誤。非常感謝您的幫助。 – Oak

0
  1. 開始,而不是從第一(因爲:

  2. ,開始你的iSettings.row-2代替

  3. 試試這個下面沒有一行):

     for (i = Settings.row-2 ... // instead of row-1 
    
  4. 刪除此行(它是多餘的):

     if (i <0||j<0)break;