Как изменить значения многомерного массива в диапазоне? - PullRequest
1 голос
/ 19 апреля 2020

Я хочу изменить значения двумерного массива из заданной начальной позиции (rowPos и colPos) на определенное количество rows и columns.

Пока у меня есть код ниже:

int[][] block = new int[10][10];

int rowPos = 3, colPos = 3;
int rows = 4, columns = 4;

for (int i = rowPos; i < rows; i++)
    for (int j = colPos; j < columns; j++)
        block[i][j] = 1;

for (int[] x : block) {
    for (int y : x)
        System.out.print(y + " ");
    System.out.println();
}

Однако это дает мне следующий вывод:

0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 1 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 

Это только установка значения на rowPos и colPos. Это мой ожидаемый результат:

0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 1 1 1 1 0 0 0 
0 0 0 1 1 1 1 0 0 0 
0 0 0 1 1 1 1 0 0 0 
0 0 0 1 1 1 1 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 

Я чувствую, что я близко, но что-то не хватает, пожалуйста, помогите мне!

1 Ответ

0 голосов
/ 19 апреля 2020

Измените циклы следующим образом:

for (int i = rowPos; i < rows + rowPos; i++)
    for (int j = colPos; j < columns + colPos; j++)
        block[i][j] = 1;

В своем коде вы позволяете i и j начинаться со строки и столбца, для которых вы хотите начать изменение значений. Это хорошо, но это также означает, что ваше состояние больше не работает. Позвольте мне показать вам, что происходит:

  1. Вы объявляете i и устанавливаете его значение равным 3.
  2. Вы проверяете, меньше ли i (3) rows ( 4). Успех!
  3. Вы объявляете j и устанавливаете его значение равным 3.
  4. Вы проверяете, меньше ли j (3) columns (4). Успех!
  5. Вы устанавливаете block[3][3] на 1.
  6. j увеличивается на 1 и теперь равно 4.
  7. Вы проверяете, если j (4 ) меньше columns (4). Ошибка!
  8. i увеличивается на 1 и теперь равна 4.
  9. Вы проверяете, меньше ли i (4) rows (4). Fail!
  10. Вы печатаете содержимое массива.

Проблема в том, что, поскольку вы запускаете i и j со значениями, превышающими 0, вам необходимо сохранить это при выполнении проверки.

...