Печать топор, у матрица, Java - PullRequest
0 голосов
/ 20 октября 2010

Я хочу напечатать следующую матрицу, используя для циклов:

 1 2 3 4 5 6
 2 3 4 5 6 1
 3 4 5 6 1 2
 4 5 6 1 2 3
 5 6 1 2 3 4
 6 1 2 3 4 5

Я использую:

public static void main ( String [ ] args ) {
    for(int w = 1; w <= 6; w++){
        System.out.println("");
        for(int p = w; p <= 6; p++){
            System.out.print(p + "");
        }
    }
}

Но она печатает:

 1 2 3 4 5 6
 2 3 4 5 6
 3 4 5 6
 4 5 6
 5 6
 6

Ответы [ 7 ]

3 голосов
/ 20 октября 2010

Я думаю, что по модулю проще распечатать все возможные комбинации. Но это возвращает число от 0 до 5, поэтому вы должны добавить 1.

final int SIZE = 6;
for(int w = 0; w < SIZE; w++) {
  for(int p = 0; p < SIZE; p++) {
    System.out.print(((w + p) % SIZE) + 1);
    System.out.print(" ");
  }
  System.out.println();
}
3 голосов
/ 20 октября 2010

Измените свой внутренний цикл на это:

for (int p = w; p <= 6 + w; p++) {
    System.out.print((p - 1) % 6 + 1 + " ");
}
2 голосов
/ 20 октября 2010

Это должно помочь вам. Почти то, что вы пытаетесь сделать, но с дополнительным циклом for.

public static void main(String[] args) {

        for (int w = 1; w <= 6; w++) {
            System.out.println("");

            for (int p = w; p <= 6; p++) {
                System.out.print(p + "");
            }
            for (int q = 1; q < w; q++) {
                System.out.print(q + "");
            }
        }

    }
2 голосов
/ 20 октября 2010
public static void main ( String [ ] args ) {
    for(int w = 0; w < 6; w++){
        System.out.println("");
        for(int p = 0; p < 6; p++){
                System.out.print((p + w) % 6 + 1  + "");
        }
    }
}
1 голос
/ 21 октября 2010

Другие люди предлагали причудливые решения по модулю, но я думаю, что самое простое - иметь второй внутренний цикл, который покрывает числа, пропущенные первым внутренним циклом.

public static void main ( String [ ] args ) {
    for(int w = 1; w <= 6; w++){
        for(int p = w; p <= 6; p++){
            System.out.print(p + "");
        }
        for(int p = 1; p < w; p++){
            System.out.print(p + "");
        }
        System.out.println("");
    }
}
1 голос
/ 20 октября 2010

Это будет работать, хотя я не проверял!:

for(int w = 1; w <= 6; w++){ 
    System.out.println("");
    for(int p = 0; p <= 5; p++){
       if((w+p) <=6) {
           System.out.print((w+p) + "");
       } else {
           System.out.print((w+p-6) + "");
       }
    } 
}

Приветствия

1 голос
/ 20 октября 2010

это происходит потому, что ваш внутренний цикл зависит от w, но w увеличивается.

edit - вот что я придумал

public class Loop {
    public static void main(String[] args) {
        for (int w = 1; w <= 6; w++) {
            System.out.println("");
            Loop.printRow(w);

        }
    }

    public static void printRow(int startAt) {

        int p = startAt;
        for(int i = 0; i <= 6; i++, p++){
            if (p > 6) p -= 6;

            System.out.print(p + "");
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...