【发布时间】:2014-02-13 16:45:04
【问题描述】:
好的,所以我目前的任务是让我编写一个可以模拟渗透的程序,这意味着它必须读取一个数组,其中 1 表示空间关闭,0 表示空间打开。接下来,它必须将数组顶行的所有 0 更改为 2,表示正在倒入的液体。然后液体可以跟随 0(表示流动),一路将它们全部更改为两个。液体可以上下左右移动。不是对角线。我的程序几乎可以工作,但是 for 循环似乎没有超过数组的第一行。
public class Percolation2 {
public static void main (String[] args) {
int[][] filter1 = {{1,0,1,0,1,1,0},
{1,0,1,1,1,0,0},
{0,0,0,1,0,0,1},
{1,1,0,1,1,1,1},
{1,0,0,1,1,0,1},
{1,0,1,0,1,0,1},
{0,0,0,0,1,1,0},
{1,1,1,0,1,0,1}};
for(int i=0; i<7; i++) {
if(filter1[0][i] ==0) {
filter1[0][i] = 2;
}
}
for ( int i = 0 ; i < filter1.length ; i++ ) {
for ( int j = 0 ; j < filter1[i].length ; j++ ) {
if ( filter1[i][j] == 0 )
if(i-1 > 0 && filter1[i-1][j] == 2)
filter1[i][j] = 2;
if(i+1 < 7 && filter1[i+1][j] ==2)
filter1[i][j] = 2;
if(j-1 > 0 && filter1[i][j-1]==2)
filter1[i][j] = 2;
if(j+1 < 7 && filter1[i][j+1] == 2)
filter1[i][j] = 2;
}
}
for(int i = 0; i < filter1.length; i++) {
for(int j = 0; j < filter1[i].length; j++) {
System.out.print(filter1[i][j]);
if(j < filter1[i].length - 1) System.out.print(" ");
}
System.out.println();
}
}
}
我的输出如下:
2 2 2 2 2 2 2
1 0 1 1 1 0 0
0 0 0 1 0 0 1
1 1 0 1 1 1 1
1 0 0 1 1 0 1
1 0 1 0 1 0 1
0 0 0 0 1 1 0
1 1 1 0 1 0 1
所以你可以清楚地看出它没有正确循环。
【问题讨论】:
-
我建议您使用适当的缩进来格式化您的代码。这将使阅读更容易。您是否也尝试过使用调试器来观察程序的逐步执行情况?
-
在我看来,您(至少)在双
for循环中if(filter1[i][j] == 0)之后的代码周围缺少一个花括号。你的第一行不应该是1 2 1 2 1 1 2...不是所有2s? -
if(filter1[i][j] == 0)在第二个循环中。第一行不包含任何 0 为何跳过此守卫。 -
好吧,他“手动”做了第一行,双
for循环将有效地跳过第一行(没有0s),但应该继续其他人,当 @987654330 @.
标签: java arrays loops multidimensional-array