2016-02-11 2 views
2

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

Проблема:

Напишите программу, которая просит пользователя ввести размер треугольника (от 1 до 50), а затем распечатать треугольник распечатав ряд линий, состоящих из звездочками. Первая строка будет иметь 1 звездочку, две следующие две и т. Д., Причем каждая строка имеет еще одну звездочку, чем предыдущая строка, до номера, введенного пользователем. На следующей строке напечатайте еще одну звездочку и продолжайте уменьшать число звездочек на 1 для каждой последовательной строки до тех пор, пока не будет напечатана какая-либо звездочка.

Я могу сделать программу распечаткой, однако я не знаю, как ее распечатать вниз. Мой профессор говорит, чтобы использовать для петель.

import java.util.Scanner; 

public class CS123Ass5ID5189 { 
    public static void main(String[] args) { 
     int size; 
     System.out.println("Enter Triangle size"); 
     Scanner key = new Scanner(System.in); 
     size = key.nextInt(); 

     System.out.println(size); 

     for (int i = 0; i < size; i++) { 
      for (int f = 0; f < i; f++) { 
       System.out.print("*"); 
      } 
      System.out.println("*"); 

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

Полагал выглядеть как

* 
** 
*** 
** 
* 
+0

Ваш второй внешний контур не будет введен на всех, если размер не является отрицательным 'для (INT I = 0; я> размер,' –

+0

Да, изменить его на ' <'в обоих циклах, а во внутреннем цикле просто используйте' print', а не 'println'. –

+0

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

ответ

1

Ваш ответ почти там. Вам просто нужно, чтобы второй внешний цикл отсчитывал от size до нуля во внешнем цикле и делал то же самое.

for (int i = size - 1; i > 0; i--) 

Таким образом, первый цикл идет от 0 до размера, и этот цикл переходит от (размера - 1) до 0.

for (int i = size - 1; i > 0; i--) { 
    // This section is exactly the same as in the first loop 
    for (int f = 0; f < i; f++) { 
     System.out.print("*"); 
    } 
    System.out.println("*"); 
} 

Редактировать

Чтобы ограничить число входного сигнала для 50, проверьте его в другом цикле. Пока пользователь ввел недопустимый номер, сообщите им и попросите другого. Добавьте это сразу после получения начального номера:

while (size < 0 || size > 50) 
{ 
    System.out.print("Size must be between 0 and 50. Try again: "); 
    size = key.nextInt(); 
} 
+0

Спасибо, но теперь я получаю его для подсчета U p до тех пор, пока номер i не будет выбран, но после этого он будет непрерывно печататься в бесконечность. он не уменьшается в числе –

+0

Вы исправили внутренний цикл? –

+0

Yay, была выбрана целая куча одинаковых ответов и моя! –

0

Для циклов может начинаться любое значение, а не только ноль. Это позволит вам начать с size и уменьшиться до нуля.

Here - пример того, что вы ищете. (Он ссылается на онлайн-исполняемый файл, чтобы продемонстрировать код ниже.)

public class Main 
{ 
    public static void main (String[] args) 
    { 
     int size = 10; 

     System.out.println(size); 

     for (int i=0; i<size-1; i++) 
     { 
      for (int f=0; f<i; f++) 
      { 
       System.out.print("*"); 
      } 
      System.out.println("*"); 
     } 

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

P.S. Ваш второй внутренний цикл должен иметь System.out.print не System.out.println, чтобы сохранить все звездочки на одной линии.

0

Ваш второй цикл неправильный, он должен быть для i>0. Кроме того, начинаются с 1, а не 0 и печатать как это:

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

Ваш внутренний цикл должен быть по-прежнему считать до величины i. Это должно делать то, что вам нужно.

+0

ok Я почти там, когда программа отсчитывает вторую половину треугольника он теперь отсчитывает вертикально. а не горизонтально, как остальная часть треугольника. есть идеи??? –

+1

Еще раз: убедитесь, что ваши внутренние петли используют 'print', а не' println'. –

+0

@AustinHarlan Не знаете, что вы имеете в виду, обратив внимание вниз по вертикали? Вы имеете в виду, что он печатает 1 звездочку в строке? Повторите попытку, если вы это сделаете, я просто обновил второй цикл для 'print' вместо' println'. Забыл изменить его раньше. –

0

Ваша первая петля выглядит нормально, но посмотрите на второй цикл.

for (int i = 0; i > size; i--) { 
    for (int f = 0; f > i; f--) { 
     System.out.println("*"); 

Если размер больше 0, внешний контур не будет введен.Исправьте это, установив i = size - 1, затем петля до i > 0 и i-- для уменьшения i в каждом цикле.

Внутренняя петля имеет аналогичную проблему, она должна быть точно такой же и предыдущей внутренней петлей. Также точно такой же в использовании System.out.print вместо System.out.println. В противном случае треугольник будет печатать вертикально для нижней половины.


FWIW - Легче читать, если вы делаете небольшие методы, чтобы четко показать свое намерение.

private static void printStarLine(int howManyStars) { 
    for (int i = 0; i < howManyStars; i++) { 
     System.out.print("*"); 
    } 
    System.out.println(); 
} 

public static void main(String[] args) { 
    Scanner key = new Scanner(System.in); 

    int size = 3; // some number in the range 1-50 
    do { 
     System.out.println("Enter Triangle size (1-50)"); 
     size = key.nextInt(); 
    } while (size < 1 || size > 50); 

    for (int stars = 1; stars < size; stars++) { 
     printStarLine(stars); 
    } 

    printStarLine(size); 

    for (int stars = size - 1; stars > 0; stars--) { 
     printStarLine(stars); 
    } 
} 
-1
for(i=1; i<=n; i++) 
{ 
    for(j=1; j<=i; j++) 
    { 
     System.out.print("*"); 
    } 
    System.out.println(); 
} 
for(i=n; i>=1; i--) 
{ 
    for(j=1; j<i; j++) 
    { 
     System.out.print("*"); 
    } 
    System.out.println(); 
} 

это работает

+0

Объясните * почему * это работает. – Makoto

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