Проблема с соответствующим построением циклов do while с правильными условиями выполнения - PullRequest
0 голосов
/ 28 марта 2019

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

Я попытался реализовать цикл do while для запуска кода, начинающегося с «пожалуйста, введите целое число» и заканчивающегося после моего оператора switch частью while: while (case "y" || "Y" == true) Любая помощь будет принята с благодарностью. Я искал предыдущие сообщения о переполнении стека уже пару часов и не смог найти ничего, что могло бы помочь.

проект публичного класса8 {

/**
 * Constructor for objects of class Project4
 */
public static void main(String[] args) {
    System.out.println("Welcome to my integer  Roman numeral conversion program");
    System.out.println("------------------------------------------------------");
    System.out.println(" ");
    Scanner in = new Scanner (System.in);
    System.out.print("Enter an integer in the range 1-3999 (both inclusive): ");
    int input = in.nextInt();
    if (input < 0 || input > 3999){
        System.out.println("Sorry, this number is outside the range.");
        System.out.println("Do you want to try again? Press Y for yes and N for no: ");
            String userInput = in.next();
                switch (userInput) {
                 case "N":
                 case "n":
                 System.exit(0);
                 break;

                 case "Y":
                 case "y":
                break;
                }   
            } 
    else if (input > 0 && input < 3999); 

      { System.out.println(Conversion.Convert(input));
        }          
}

}

1 Ответ

1 голос
/ 28 марта 2019

1) Ваши if - else if условия избыточны. Вы можете использовать простой if - else, так как ввод может быть только в этом диапазоне или нет. else if имеет смысл только если у вас есть два или более диапазона для проверки, например

if(input > 0 && input < 3999){ 
  ...
} 
else if (input > 4000 && input < 8000){ 
... 
} 
else { 
...
} 

2) Вам не нужен блок переключателей, вместо этого используйте пользовательский ввод в вашем состоянии while, так как вы хотите продолжить цикл, когда пользователь вводит Y / y, т.е. while(userChoice.equals("Y"))

3) Используйте цикл do - while, если хотите, чтобы ваше приложение запускалось как минимум вовремя

public static void main(String[] args) {

    System.out.println("Welcome to my integer  Roman numeral conversion program");
    System.out.println("------------------------------------------------------");
    System.out.println(" ");

    Scanner in = new Scanner (System.in);
    String choice;
    do{
        System.out.print("Enter an integer in the range 1-3999 (both inclusive): ");
        int input = in.nextInt();
        if(input > 0 && input < 3999){
            System.out.println(Conversion.Convert(input));
        }
        else{
            System.out.println("Sorry, this number is outside the range.");
        }
        System.out.println("Do you want to try again? Press Y for yes and N for no: ");
        choice = in.next();
    }while(choice.equals("Y") || choice.equals("y"));
}
...