2016-07-04 1 views
0

В настоящее время я пытаюсь сделать эту форму для цикла в Java:Java для изготовления петли звездочки матрицы

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

Мой код выглядит следующим образом:

 for (int row = 1; row <= 10; row++) { 
     for (int star = 10; star >= 1; star--) { 
      if (star >= row) { 
       System.out.print("*"); 
      } else { 
       System.out.print(" "); 
      } 
     } 
     System.out.println(); 
    } 

Выход выглядит следующим образом :

Я не могу понять, чтобы сделать пробел перед звездами. Я попытался переключить условия цикла, но это просто дает мне тот же результат. Есть что-то об этих петлях, которые я не получаю. Может кто-то указать мне в правильном направлении :)

+0

Попробуйте 'если (звезда <строку) {'. –

+1

Подсказка: такие вещи действительно идеальны для использования отладчика. И еще лучше: вы можете запускать их на бумаге. Просто возьмите ручку и выполните свой код вручную. Я уверен, что это не займет у вас более 5 минут, прежде чем вы решите проблему. – GhostCat

+0

Что называется? 'для столбца int P = 1' вместо' star = 10' было бы менее ошеломляющим. –

ответ

1

Так что я попытался проанализировать свой код и то, что я нашел

Ваша ошибка:

Здесь мы видим, что желаемый результат и ваш выход становится отличным от выходной строки номер 2, и причина, по которой я нашел, - это состояние if, которое равно star >= row так позволяет перебирать петлю звезды для значения 2row:

if(star >= row) //when star = 10 - condition true. * will be the output 

if(star >= row) //when star = 9 - condition true. * will be the output 

if(star >= row) //when star = 8 - condition true. * will be the output 

так * будет выходом недо star>=row возвращает ложь, которая будет star = 1 сценария для этой итерации.
Аналогично для row = 3 условие будет истинным, если значение star не станет <=2. Поэтому проблема заключается в том, что вы печатаете * в начале, и условие для приходит после печати *.

Возможное решение:

В основном вам нужно напечатать в начале, а не в конце. Таким образом, при том же условии вам может потребоваться изменить метод итерации для столбцов, чтобы отменить порядок печати. если вы измените порядок своего цикла, вы можете выполнить эту работу. Позволяет итерацию цикла для row значения 2:

if(star >= row) //when star = 1 - condition false. ` ` will be the output 

if(star >= row) //when star = 2 - condition true. * will be the output 

if(star >= row) //when star = 8 - condition true. * will be the output 

так что в этом случае будет напечатана первым и * будет распечатан позже.

обновленный код:

Я обновил свой код. Посмотрите на inner for loop.

for (int row = 1; row <= 10; row++) 
{ 
    for (int star = 1; star <= 10; star++) 
    { 
     if (star >= row) 
     { 
      System.out.print("*"); 
     } 
     else 
     { 
      System.out.print(" "); 
     } 
    } 
    System.out.println(); 
} 

Надеется, что это помогает :)

1

Измените внутренний цикл на стандартную петлю от 1 до 10.

for (int row = 1; row <= 10; row++) { 
    for (int star = 1; star <= 10; star++) { 
     if (star >= row) { 
      System.out.print("*"); 
     } else { 
      System.out.print(" "); 
     } 
    } 
    System.out.println(); 
} 
1

Попробуйте

int size = 10; 
for (int row = 0; row < size; row++) 
{ 
    for (int i = 0; i < row; i++) 
    { 
     System.out.print(" "); 
    } 

    for (int i = size - row; i > 0; i--) 
    { 
     System.out.print("*"); 
    } 

    System.out.println(); 
} 
1

Первая задача отойти от клавиатуры и продумывать проблемы. Оказывается, что условие для звезды - «текущая строка> = текущий столбец».

Реализовать что использование

for (int row = 1; row <= 10; ++row){ 
    for (int col = 1; col <= 10; ++col){ 
     System.out.print(row >= col ? "*" : " "); 
    } 
    System.out.println(); 
} 
0
for(int i = 0 ; i < 10 ; i++){ 

     for(int j = 0 ; j < 10 ; j++){ 

      if(j >= i){ 
       System.out.print("*"); 
      }else{ 
       System.out.print(" "); 
      } 
     } 
      System.out.println(""); 

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