2016-04-04 4 views
0

Я новичок в Java программирования, и я хочу, чтобы напечатать пирамиду, как в изображении:номера пирамиды в Java

enter image description here

У меня уже есть пирамиды (без номеров) (х является номера строк, которые хотят пользователи) Любая помощь хорошая!

for (int i=1; i<(2*x+1); i += 2) 
{ 
    for (int k=0; k < ((x-1) - i/2); k++) 
    { 
     System.out.print(" "); 
    } 
    for (int j=0; j<i; j++) 
    { 
     System.out.print(x); 
    } 
    System.out.println(""); 
} 
+1

давай;) ваш код выглядит хорошо. Пирамида почти закончена ... попробуйте использовать некоторые условные выражения (if/else) вокруг этой строки: 'System.out.print (x);' У вас есть переменные 'i' и' j' ... может быть, вы должны считать еще один (на основе 'x'). Я уверен, что вы в состоянии решить эту проблему! –

+0

Я дам вам подсказку: вы можете сделать это с помощью одного 'if-else' в' for loop', который использует 'j' и еще одну переменную. – DigitalNinja

+0

Спасибо за ответы! Теперь я понимаю, что был очень близок к ответу! И хайфжан ваш ответ лучший! Если кто-то из вас знает о более страницах, где я могу практиковать Java-программирование, я был бы рад посетить их, спасибо снова! – albita

ответ

1

Без сломать существующую логику, даже если это трудно прочитать, код может быть (см. комментарии ниже):

 for (int i=1; i<(2*x+1); i += 2) 
     { 
      for (int k=0; k < ((x-1) - i/2); k++) 
      { 
       System.out.print(" "); 
      } 
      for (int j=0; j<i; j++) 
      { 
       if((j==0)||(j==i-1)){ 
        // if it is smallest j or biggest j, print 0 
        System.out.print(0); 
       }else if(i == 2*x+1 - 2){ 
        // if it is biggest i, print 0 
        System.out.print(0); 
       } 
       else{ 
        // the rest conditions, print row number 
        System.out.print((i-1)/2); 
       } 
      } 
      System.out.println(""); 
     } 

Все, что я сделал, это заменить System.out.print(x); с

    if((j==0)||(j==i-1)){ 
         // if it is smallest j or biggest j, print 0 
         System.out.print(0); 
        }else if(i == 2*x+1 - 2){ 
         // if it is biggest i, print 0 
         System.out.print(0); 
        } 
        else{ 
         // the rest conditions, print row number 
         System.out.print((i-1)/2); 
        } 
3

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

for (int i = 0; i < size; i++) 
    System.out.println(line(i, size)); 

private String line(int row, int size) { 
    StringBuilder line = new StringBuilder(); 
    for (int col = 0; col < size * 2 + 1; col++) { 
     line.append(cell(row, col, size)); 
    } 
    return line; 
} 

или если вы используете Java 8:

return IntStream.range(0, size * 2 + 1) 
    .map(col -> cell(row, col, size)).collect(Collector.joining()))) 

Наконец метод, чтобы выбрать символ для каждой позиции:

private String cell(int row, int col, int size) { 
    int offset = size - col; 
    if (offset == row) 
     return "0"; 
    else if (offset > row) 
     return " "; 
    else if (row == size - 1) 
     return "0"; 
    else 
     return row; 
} 
0

Это мой код для получения выходного

for(int i=0;i<x;i++) 
{ 
int space=x-i; 
//System.out.println("inside first for"); 

    for(int j=0;j<(i*2)+1;j++) 
    { 
     int total_spaces=space; 

    if(j==0 || j==(i*2)) 
    { 
     if(j==0) 
     { 
     while(total_spaces>0) 
     { 
    System.out.print(" "); 
    total_spaces--; 
     } 
     } 

    System.out.print("0"); 
    if(j==(i*2)) 
    { 
      while(total_spaces>0) 
     { 
    System.out.print(" "); 
    total_spaces--; 
     } 
    } 
    } 


    else 
    System.out.print(i); 

    } 
System.out.println(); 
} 
0

здания на answer by @haifzhan, который является отличным ответом, так как это дает вам решение с минимальным измените на исходный код, следует указать, что формулы могут быть упрощены, если внешний цикл также является простым циклом инкремента нулевого уровня.

Трехходового if утверждение может быть заменено на трехкомпонентном выражении инлайн (?:), а код может быть расширен для поддержки пирамид до высоты 37, заполняя интерьер с шестнадцатеричными цифрами, в отличии от тока максимальная высота 11.

Сжатие кода немного, вы получите:

for (int i = 0; i < x; i++) { 
    for (int j = 0; j < x - i - 1; j++) 
     System.out.print(' '); 
    for (int j = 0; j <= i * 2; j++) 
     System.out.print(j == 0  || // left edge 
         j == i * 2 || // right edge 
         i == x - 1 ? '0' // bottom edge 
         : Character.forDigit(i, 36)); // center hex digit 
    System.out.println(); 
} 
Смежные вопросы