Хорошо, поэтому мое текущее задание позволяет мне создать программу, которая может имитировать перколяцию, что означает, что она должна читать массив, где 1 означает, что пространство закрыто, 0 означает, что пространство открыто. Затем он должен изменить все 0 в верхней строке массива на 2, представляя жидкость, в которую наливают. Затем жидкость может следовать за 0 (представляя поток), изменяя их все на два по пути. Жидкость может двигаться вверх, вниз, влево и вправо. не диагональ. У меня почти работает моя программа, но циклы for не проходят больше, чем первая строка массива.Проблема с циклами в программе 2D-массива
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
Таким образом, вы можете четко сказать, что это не зацикливание должным образом.
Я предлагаю вам отформатировать код с правильным отступом. Это облегчит чтение. Также вы пытались использовать отладчик для наблюдения за пошаговым исполнением вашей программы? –
Похоже, что вы (по крайней мере) не видите фигурного скобки вокруг кода после 'if (filter1 [i] [j] == 0)' в двойном цикле 'for'. И не должна ваша первая строка быть '1 2 1 2 1 1 2' ... не все' 2 's? –
'if (filter1 [i] [j] == 0)' во втором цикле. Первая строка не содержит 0, почему этот защитник пропущен. –