簡體   English   中英

應用重力:2D數組

[英]Applying Gravity : 2D arrays

我的程序由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.colsomething.lenght相似, something.lenght意味着它們具有網格的長度,即使網格從0開始。

在這種情況下,如何避免outofBounds錯誤?

  • 在第3行:

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

改成:

                for (j =Settings.col-1;j>=0 ; j--){
  • 然后可以刪除if行。

  • 然后在Settings.row-2上啟動i

  • 嘗試這個:

      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; } } } } 
  1. 從底部的第二行開始,而不是從第一行開始(因為它下面沒有行):

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM