Java 应用重力:二维阵列

Java 应用重力:二维阵列,java,reverse,multidimensional-array,Java,Reverse,Multidimensional Array,我的程序由一个二维数组组成的网格组成。 用户输入会删除网格的某些元素,留下空白。 我的问题是让空白以上的元素下降。 最初我有一个数组来检查空格是否为空,如果是空的,上面的元素将被删除并重新创建,因为以前有一个空格 我的问题是,我使用的数组是Left->Right,Top->Down(I++,j++),这让我不得不重复整个代码来获得新构建的空格。(例如,如果我从第三行删除了某些内容,第二行将为空,但我已经选中了第二行 由于这将是非常无效的(包括叠加错误),我决定执行保留,底部->顶部,右侧->左侧

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

最初我有一个数组来检查空格是否为空,如果是空的,上面的元素将被删除并重新创建,因为以前有一个空格

我的问题是,我使用的数组是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                 
   }
  }
 }
}
publicstaticvoiddropball(){
对于(i=Settings.row-1;i>=0;i--){
对于(j=Settings.col-1;i>=0;j--){
如果(i
  • 第3行:

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

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

  • 然后在
    设置中启动
    i
    。改为第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;
               }
           }
        }
     }
    
  • 从底部的第二行开始,而不是从第一行开始(因为它下面没有行):

  • 删除该行(它是冗余的):


    if(i“Settings.row[…]类似于.lenght”。因此,您从
    length-1
    开始执行
    i
    ,然后执行
    grid[i+1]
    。因此,在if语句的第一次迭代中,这相当于
    grid[length][j]
    。这就是为什么会出现这种异常。是的,我完全忘记了底部本身下面没有任何东西,或者至少没有提到数组中的任何东西。这是真的,根据if语句,我有点泄密,所以我编了一些限制来防止它,第三行
    I>=0
    ,很可能是由于切换Ing从++到--(第50次),但老实说,我没有看到它。根据
    I
    at
    Settings.row-2
    ,这是如此明显和简单,以至于我忘了做这件事而感到愚蠢,相反,我尝试创建50行来防止一个错误。非常感谢您的帮助。
          for (i = Settings.row-2 ... // instead of row-1
    
          if (i <0||j<0)break;