Java 应用重力:二维阵列
我的程序由一个二维数组组成的网格组成。 用户输入会删除网格的某些元素,留下空白。 我的问题是让空白以上的元素下降。 最初我有一个数组来检查空格是否为空,如果是空的,上面的元素将被删除并重新创建,因为以前有一个空格 我的问题是,我使用的数组是Left->Right,Top->Down(I++,j++),这让我不得不重复整个代码来获得新构建的空格。(例如,如果我从第三行删除了某些内容,第二行将为空,但我已经选中了第二行 由于这将是非常无效的(包括叠加错误),我决定执行保留,底部->顶部,右侧->左侧数组(I-,j-),我的问题是,我得到了一个数组越界错误,尽管我确保它不可能越界 下面是一段给出问题的代码Java 应用重力:二维阵列,java,reverse,multidimensional-array,Java,Reverse,Multidimensional Array,我的程序由一个二维数组组成的网格组成。 用户输入会删除网格的某些元素,留下空白。 我的问题是让空白以上的元素下降。 最初我有一个数组来检查空格是否为空,如果是空的,上面的元素将被删除并重新创建,因为以前有一个空格 我的问题是,我使用的数组是Left->Right,Top->Down(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
atSettings.row-2
,这是如此明显和简单,以至于我忘了做这件事而感到愚蠢,相反,我尝试创建50行来防止一个错误。非常感谢您的帮助。
for (i = Settings.row-2 ... // instead of row-1
if (i <0||j<0)break;