应用重力:2D数组

时间:2014-01-06 09:12:04

标签: java reverse multidimensional-array

我的程序由一个由2D数组组成的网格组成。 用户输入删除网格的某些元素,留下空格。 我的问题是让空格上方的元素下降。

原来我有一个数组来检查空格是否为空,如果是空白,则上面的元素将被删除并重新创建曾经空白的地方。

我的问题是,我以前使用的数组是Left-> Right,Top-> Down(i ++,j ++),这让我不得不重复整个代码以获得新建的空白空间。 (例如,如果我从第3行删除了某些内容,则第2行将为空白,但我已经检查了第2行。

由于它会非常无效(包括过度修补错误)我决定做保留,底部>顶部,右侧>左侧阵列(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错误?

2 个答案:

答案 0 :(得分:0)

  • 第3行:

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

更改为:

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

  • 并在i开始Settings.row-2而不是

  • 试试这个:

     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 :(得分:0)

  1. 从底部的第二行开始,而不是从第一行开始(因为它下面没有行):

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

          if (i <0||j<0)break;
    
相关问题