Цикл программы до 0 (выход) (java)

У меня есть этот Java-код, который в основном просто печатает рождественскую елку высотой X. Однако программа запрашивает номер, затем печатает дерево, а затем просто заканчивается. Я хотел бы, чтобы он зацикливался, пока я не введу 0, который завершит программу , а также я хотел бы, чтобы он печатался только в том случае, если введенное число от 1 до 40 (не более 40). Я начинаю в мире java и не знаю, как это сделать. Вот мой код на данный момент:

public class xtree {

    public static void main(String[] args)
    {
        Scanner scan = new Scanner(in);
        out.print("please enter a number: ");
        int temp = scan.nextInt();
        int x = (temp-1)*2 +1; 
        int y = x/2;  
        int z = 1;  
        for(int i=0; i<temp-1; i++) 
        {
            for(int j=0; j<=y; j++) 
            {
                out.print(" ");
            }
            for(int k = 0; k<z; k++) 
            {
                out.print("*");
            }
            out.println(); 
            y--;
            z+=2; 
        }
        for(int i =0; i<=x/2; i++) 
        {
            out.print(" ");
        }
        out.println("*"); 
    }
}

Спасибо, я новичок в java, поэтому, пожалуйста, будьте снисходительны;)


person Johnny_b    schedule 06.09.2014    source источник


Ответы (3)


Ну, я бы разделил метод на два:

  • Метод printChristmasTree, который принимает высоту в качестве параметра
  • Ваш метод main, который просто имеет дело с вводом данных пользователем и вызовом printChristmasTree или выходом

Большая часть вашего текущего метода main войдет в printChristmasTree, а main будет циклом. Что-то типа:

public static void main(String[] args) {
    Scanner scan = new Scanner(in);
    while (true) {
        System.out.print("Please enter a number (0-40): ");
        int height = scan.nextInt();
        if (height == 0) {
            // Exit the program
            return;
        } else if (height >= 1 && height <= 40) {
            printChristmasTree(height);
        } else {
            System.out.println("Invalid input.");
        }
    }
}

Есть и другие подходы, которые вы могли бы использовать вместо возврата из цикла while (true), но этот мне кажется самым простым.

Разделение аспектов «получения входных данных» и «печати рождественской елки» приводит к гораздо более читаемому коду, чем объединение их, на мой взгляд, и это более гибко с точки зрения таких вещей, как написание другой программы для печати все действительные рождественские елки.

person Jon Skeet    schedule 06.09.2014

Используйте цикл while:

    Scanner scan = new Scanner(System.in);
    System.out.print("please enter a number: ");

    int temp = scan.nextInt();
    while (temp>0) {
        int x = (temp-1)*2 +1; 
        int y = x/2;  
        int z = 1;  
        for(int i=0; i<temp-1; i++) 
        {
            for(int j=0; j<=y; j++) 
            {
                System.out.print(" ");
            }
            for(int k = 0; k<z; k++) 
            {
                System.out.print("*");
            }
            System.out.println(); 
            y--;
            z+=2; 
        }
        for(int i =0; i<=x/2; i++) 
        {
            System.out.print(" ");
        }
        System.out.println("*");
        temp = scan.nextInt();
    }
person Jens    schedule 06.09.2014

Вот код для этого:

public class xtree {

    public static void main(String[] args)
    {
        int temp;
        do{
            Scanner scan = new Scanner(in);
            out.print("please enter a number: ");
            temp = scan.nextInt();

            if(temp >= 1 && temp <= 40){ //don't display a tree higher than 40
                int x = (temp-1)*2 +1; 
                int y = x/2;  
                int z = 1;  
                for(int i=0; i<temp-1; i++) 
                {
                    for(int j=0; j<=y; j++) 
                    {
                        out.print(" ");
                    }
                    for(int k = 0; k<z; k++) 
                    {
                        out.print("*");
                    }
                    out.println(); 
                    y--;
                    z+=2; 
                }
                for(int i =0; i<=x/2; i++) 
                {
                    out.print(" ");
                }
                out.println("*"); 
            }else if(temp != 0){
                out.print("Please enter a number between 1 and 40!");
            }
        }while(temp != 0);
    }
}
person Philipp    schedule 06.09.2014
comment
спасибо за вашу помощь, это работает, однако я ввожу 0, это все еще возвращает сообщение об ошибке Пожалуйста, введите число от 1 до 40! перед выходом; как я могу заставить его выйти без ввода сообщения об ошибке? Благодарность - person Johnny_b; 07.09.2014
comment
Я отредактировал ответ, только что изменил ... } else { ... на } else if(temp != 0){ Теперь это должно работать;) - person Philipp; 08.09.2014