Как мне написать программу для вывода треугольника чисел в Java? - PullRequest
0 голосов
/ 09 ноября 2011

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

                   1 
                 1 2 1 
                1 2 4 2 1 
              1 2 4 8 4 2 1 
            1 2 4 8 16 8 4 2 1 
          1 2 4 8 16 32 16 8 4 2 1 
       1 2 4 8 16 32 64 32 16 8 4 2 1 
    1 2 4 8 16 32 64 128 64 32 16 8 4 2 1 

//pattern1
for(int outer=1;outer<=6;outer++) // outer loop controls number of rows
{
    for(int inner=1;inner<=outer; inner++) // another loop to control number of numbers in each row.
    {
        System.out.print(inner);
    }
    System.out.println(); // move the cursor from the end of the current line to the beggiing to the next line
}

//pattern 2
for(int outer =1; outer<=6 ; outer++) //outer loop controls number of rows
{
    //3-1 create spaces before numbers.
    for(int space=1; space<=6-outer; space++ ) //group controls number of spaces
    {
        System.out.print(" ");
    }

    //3-2 print out real numbers.
    for(int inner=1;inner<=outer; inner++) // another loop to control number of numbers in each row.
    {
        System.out.print(inner);
    }
    System.out.println();
}

Эти два кода находятся спиной к спине, но я не понимаю, как заставить цифры 2 4 8 16 и т. Д. Показывать, и ставить их спиной к спине

Что не так с моим кодом? Есть ли лучший способ сделать это в Java?

Ответы [ 3 ]

10 голосов
/ 10 ноября 2011

Простая версия со сдвигом битов и статическим размером столбца / заполнением - может быть улучшена с помощью Math.getExponent() для динамически повторяющихся пробелов и формата %3d ...

public static void f(int n) {
    for (int i = 0; i < n; i++) {
        for (int l = n - i; l > 0; l--) { // padding for symmetry
            System.out.print("    "); 
        }
        for (int j = 0; j <= i; j++) { // "left side" of pyramid
            System.out.printf("%3d ", 1 << j); 
        }
        for (int k = i - 1; k >= 0; k--) { // "right side" of pyramid
            System.out.printf("%3d ", 1 << k); 
        }
        System.out.println();
    }
}

Вывод:

                              1 
                          1   2   1 
                      1   2   4   2   1 
                  1   2   4   8   4   2   1 
              1   2   4   8  16   8   4   2   1 
          1   2   4   8  16  32  16   8   4   2   1 
      1   2   4   8  16  32  64  32  16   8   4   2   1 
  1   2   4   8  16  32  64 128  64  32  16   8   4   2   1 
5 голосов
/ 10 ноября 2011

Вы собираетесь использовать вложенный цикл с оператором if, управляющим выводом.

Этот код должен помочь вам с форматированием. Вы должны выяснить, как добавить || чтобы он перевернул треугольник и как отформатировал операторы печати, чтобы он выглядел следующим образом.

int totalWidth = 8;
for (int row = 1; row <= totalWidth; row++) {
    for (int col = 1; col <= totalWidth; col++) {
      if (col <= totalWidth - row) {
        System.out.print(" ");
      }else {
        System.out.print("*");
      }
    }
    System.out.println();
  }

Будет выводиться

       *
      **
     ***
    ****
   *****
  ******
 *******
********
0 голосов
/ 15 октября 2013
public class pyramid

    public static void f(int n) {
    for (int i = 0; i < n; i++) {
        for (int l = n - i; l > 0; l--) { // padding for symmetry
            System.out.print("    "); 
        }
        for (int j = 0; j <= i; j++) { // "left side" of pyramid
            System.out.printf("%3d ", 1 << j); 
        }
        for (int k = i - 1; k >= 0; k--) { // "right side" of pyramid
            System.out.printf("%3d ", 1 << k); 
        }
        System.out.println();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...