В первых 4 итерациях l oop вы увеличиваете и row
, и column
, а во всех остальных итерациях вы вообще не увеличиваете их, а помещаете их в нижнюю правую ячейку. Кроме того, ваш l oop выполняет 26 итераций, а не 25 = 5 * 5.
. Чтобы исправить ошибку, вам нужно увеличивать строку только после достижения конца строки и сброса столбца. в 0 одновременно:
final int columns = 5:
final int rows = 5
int row = 0;
int column = 0;
for (int i = 0; i < (columns * rows); ++i) {
Rectangle rect = new Rectangle(100, 100, 50, 50);
rect.setFill(Color.web(colors.get(rand.nextInt(4))));
rect.setStroke(Color.BLACK);
grid.add(rect, col, row);
++column; // move to right
// if we exceed the available horizontal space, start new row
if (column >= columns) {
column = 0;
row++;
}
}
В качестве альтернативы вы можете использовать результат усечения деления и оператор остатка для вычисления столбца / строки из i
for (int i = 0; i < (columns * rows); ++i) {
row = i / columns;
column = i % columns;
Обычно хотя вложенный l oop, как показано в других ответах, был бы предпочтительнее, но я бы хотел предоставить несколько альтернатив и объяснить, где вы ошиблись.