Как мне структурировать цикл while? (ЯВА) - PullRequest
0 голосов
/ 07 октября 2019

Новое в Java. Как мне структурировать цикл while для повторного входа в цикл, когда пользователь вводит «Y»? Должно ли время идти в самом начале? Пример вывода приведен ниже кода.

import java.util.Scanner;

public class RamosSLE33 {


public static void main(String[] args) { 


char cont = 'Y';
String anniversaryGift = " ";
int year = 0;
Scanner input = new Scanner(System.in);

System.out.printf("ANNIVERSARY YEAR%n%n1. 50%n2. 55%n3. 60%n4. None of the above."
                  + "%n%nSelect the anniversary year: ");
year = input.nextInt();

if (year == 1) 
  System.out.printf("The anniversary gift is gold.");
  if (year == 2) 
    System.out.printf("The anniversary gift is emerald.");
    if (year == 3) 
      System.out.printf("The anniversary gift is diamond.");
      if (year == 4) 
        System.out.printf("Go to www.bernardine.com/jewelry-anniv.htm#traditional for more gift choices.");

        cont = 'N';

while(Character.toUpperCase(cont) == 'Y') {
       System.out.printf("%nSearch for another anniversary gift? Enter 'Y' or 'N': ");
       cont = input.nextLine().charAt(0);
} // End while == Y    

} //End main()

} //End class RamosSLE33

ВЫБОР ОБРАЗЦА

Ответы [ 2 ]

3 голосов
/ 07 октября 2019

У вас есть несколько ошибок в программе.

  1. Ваш цикл while не запускает всю программу повторно

  2. Возможно, вход сканераутечка ресурсов, следовательно, вы не закрыли ее.

Пожалуйста, обратитесь к исправленной программе, как показано ниже

public class RamosSLE33 {

    public static void main(String[] args) {

        char cont = 'Y';
        int year = 0;
        Scanner input = new Scanner(System.in);

        while (Character.toUpperCase(cont) == 'Y') {
            System.out.printf("ANNIVERSARY YEAR%n%n1. 50%n2. 55%n3. 60%n4. None of the above."
                    + "%n%nSelect the anniversary year: ");
            year = input.nextInt();

            if (year == 1) {
                System.out.printf("The anniversary gift is gold.");
            } else if (year == 2) {
                System.out.printf("The anniversary gift is emerald.");
            } else if (year == 3) {
                System.out.printf("The anniversary gift is diamond.");
            } else if (year == 4) {
                System.out.printf("Go to www.bernardine.com/jewelry-anniv.htm#traditional for more gift choices.");
            } else {
                System.out.printf("An invalid Input Number");
            }
            cont = 'N';

            System.out.printf("%nSearch for another anniversary gift? Enter 'Y' or 'N': ");
            cont = input.next(".").charAt(0);
        } // End while == Y
        input.close();
        System.out.printf("%n The progrm ends: ");
    } // End main()

}
0 голосов
/ 07 октября 2019

Не уверен, если вы скопировали код для быстрого доступа, но сокращенное ifs делает только одну строку, вам понадобятся фигурные скобки {} для 2. этой части

  if (year == 4) 
    System.out.printf("Go to www.bernardine.com/jewelry-anniv.htm#traditional for more gift choices.");

    cont = 'N';

Следовательно, cont всегда равен N до этогоцикл, поэтому он никогда не вводится. Это, вероятно, то, что вас заводит, остальное - это просто я делаю критический анализ кода на самом деле.

Вы можете также рассмотреть 'Y'.equals (cont.touppercase ()), чтобы избежать исключений нулевого указателя, когда cont равен нулю, хотя я думаю,ваша фабрика персонажей может увернуться, что это хорошая привычка - сначала делать константы.

может также использовать do while вместо этого, так что она всегда вводит то, что нужно захватить input.nextline () перед оценкой, если это Y, и принятием решенияпродолжайте.

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

...