2015-10-25 1 views
1

Я пытаюсь напечатать различные шаблоны, используя для оператора цикла в java. И теперь я хочу узнать, как напечатать следующий шаблон. Это, в основном, наклонный тип пирамиды.Как напечатать наклонный шаблон пирамиды в java, используя для цикла в java?

* 
    ** 
    *** 
    **** 
    *** 
    ** 
    * 

Я попытался сделать это, и я сделал получить правильные результаты, но проблема в том, что я думаю, что так, как я это сделал это неудобно способ сделать это. Вот код:

for (int x = 1; x <= 4; x++) { 
    for (int y = 1; y <= x; y++) { 
     System.out.print("*"); 
    } 
    System.out.println(); 
} 
for (int x = 1; x <= 3; x++) { 
    for (int y = 3; y >= x; y--) { 
     System.out.print("*"); 
    } 
    System.out.println(); 
} 
+0

Вы можете использовать 'StringBuilder', чтобы создать полную выходную строку (все строки) и распечатать его в конце. –

ответ

5

Ваш код производит правильный вывод, и он достаточно ясен для меня. Единственное, что я мог бы сделать, это использовать переменную размера пирамиды вместо жестко заданного значения.

Вы могли бы написать его в более компактной форме, используя только 2 петли, как это:

int size = 7; 
for (int row = 0; row < size; row++) { 
    for (int column = 0; column <= Math.min(size-1-row, row); column++) { 
     System.out.print("*"); 
    } 
    System.out.println(); 
} 

Идея заключается в том, что:

  • Для каждой строки пирамиды (так строка идет от 0 до size исключена)
  • Нам нужно определить, сколько звездочек для печати. Если мы находимся в верхней половине пирамиды, она равна той, в которой мы находимся. Это мы находимся в нижней половине пирамиды, она равна size-1-row (уменьшается при увеличении строки). Таким образом, подсчет звездочки - это минимум row и size-1-row: это учитывается в одном заявлении, используя Math.min(size-1-row, row).
1

Это работает для меня:

public class DrawPattern { 
    public static void main(String[] args) { 
     int i, j; 
     int num = 7; 
     for (i = 0; i <= num; i++) { 
      for (j = 0; j <= num; j++) { 
       if (isConditionMatch(num, i, j)) { 
        System.out.print("*"); 
       } else { 
        System.out.print(" "); 
       } 
      } 
      System.out.println(); 
     } 

    } 

    private static boolean isConditionMatch(int num, int i, int j) { 
     return (i>j && i+j<=num); 
    } 
} 

Выход:

*  
**  
***  
****  
***  
**  
* 
Смежные вопросы