Создание скользящей головоломки с использованием массивов в 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 
Другие вопросы по тегам