Создание скользящей головоломки с использованием массивов в Java
Итак, я новичок в Java и решил создать скользящую головоломку с цифрами. Вот что у меня есть:
int[] puz = {1,2,3,
4,5,6,
7,8,9}
for(int i=0; i<puz.length; i++){
System.out.println(puz[i]);
}
Предполагается, что 1 - это пустое место, но я это выясню позже. Моя проблема в том, что код печатает:
1
2
3
4
5
6
7
8
9
когда я хочу это напечатать:
1 2 3
4 5 6
7 8 9
Я также попытался сделать вложенный цикл, который мне слишком неловко показывать здесь из-за того, насколько это было отвратительно. Буду ли я вместо этого использовать 2d массив?
3 ответа
Я думаю, вы могли бы попробовать...
int puz = {1,2,3,4,5,6,7,8,9};
int n = Math.ceil(Math.sqrt(puz.length));
for (int i = 0; i < puz.length; i++) {
System.out.print(puz[i] + ((i + 1) % n == 0 ? "\r\n" : " ");
}
Попробуйте создать счетчик переменных и увеличивать его каждый раз, когда вы повторяете цикл. Используя оператор модуля, разделите его на 3, а когда остаток равен 0, создайте новую строку.
int puz = {1,2,3,4,5,6,7,8,9};
int counter = 1;
for(int i=0; i<puz.length; i++){
System.out.print(puz[i]);
if (counter % 3 == 0){
System.out.println("");
}
counter++;
}
Хитрость здесь в том, чтобы использовать оператор модуля. Этот оператор делит одно число на другое и возвращает остаток. В Java (и везде, насколько я знаю), %
является оператором модуля. Если вы хотите, чтобы после каждого третьего числа был разрыв строки после него, просто разделите на три, используя деление по модулю, например так:
int[] puz = {1,2,3,4,5,6,7,8,9};
//For what it's worth, you don't have this semicolon in your question, so I added it in.
for(int i=0; i<puz.length; i++){
System.out.print(puz[i] + " ");
if(i % 3 == 2){//It's equal to 2 because you start at 0 and not 1.
System.out.println("");
}
}
Этот код, когда выполняется, печатает следующее, что вы и хотели:
1 2 3
4 5 6
7 8 9