2015-02-10 2 views
0

Я пытаюсь понять, почему мой бриллиант не полностью формируется внизу. Когда пользователь вводит какое-либо нечетное число больше трех, алмаз неправильно формируется внизу (он печатает только одну строку после самой большой средней линии). Похоже, что это (я пробовал пять строк для данного примера):Как сформировать алмаз в Java

* 
    * * 
    * * * 
    * * 

Я считаю, что что-то не так с для петель, которые, как предполагается создать в нижней части алмаза. Код для этого:

//bottom of the diamond 
    for(j = (in + 1)/2; j < in; j++){ //similar to the first for statement instead when j equals the user's input plus one divided by two it will then go to the next for loop (the diamond starts to shrink) 
     for(i = 1; i < j; i++){ //when i equals one, and j is greater than one 
      System.out.print(" "); //prints space 
     } 
     for(l = 0; l < in - j; j++){ //similar to the for loop that prints the asterisk to the left this for loop goes through when l equals zero, and this time is less than the user's input minus j 
      System.out.print(" *"); //prints the bottom asterisks 
     } 
     System.out.println(""); //starts another blank new line 
    } //just like the top section it keeps looping until the requirements are no longer met 

Что я делаю неправильно?

+5

'l = 0; l

+0

Спасибо за исправление (удивлен, что я пропустил эту опечатку)! – Fyree

ответ

0

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

Так, в ответ на ваш вопрос

Что я делаю неправильно?

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

int in = 5; 
for (int j = 1; j <= in; j++) { 
    for (int i = 0; i < in - j; i++) { 
    System.out.print(" "); 
    } 
    for (int i = 0; i < j; i++) { 
    System.out.print(" *"); 
    } 
    System.out.println(""); 
} 
for (int j = in - 1; j >= 1; j--) { 
    for (int i = 0; i < in - j; i++) { 
    System.out.print(" "); 
    } 
    for (int i = 0; i < j; i++) { 
    System.out.print(" *"); 
    } 
    System.out.println(""); 
} 

Теперь единственное различие между этими двумя for петлями, что первый подсчитывает от 1 к in и секунде отступает от in - 1 до 1.

+0

Интересно, мне нужно попробовать, спасибо за информацию! – Fyree

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