Java if else в цикле while

#java #if-statement #while-loop

#java #оператор if #цикл while

Вопрос:

у меня была такая проблема, когда во время цикла на выходе отображается цикл, но также присутствует недопустимый. как мне разделить цикл и операторы if …else?

ниже приведен программный код.

 Scanner scan = new Scanner(System.in);
String option = new String("Y");

while (option.equalsIgnoreCase("Y")) {
    System.out.println("Good Morning!!");
    System.out.print("Do you want to continue [Y/N]: ");
    option = scan.nextLine();

    if (option.equalsIgnoreCase("N")) {
        break;

    } else {

        System.out.println("invalid");
    }
}
  

это результат цикла. недопустимый должен отображаться только тогда, когда я ввожу другую букву, отличную от y или n

 Do you want to continue [Y/N]: y
invalid
Good Morning!!
Do you want to continue [Y/N]: y
invalid
Good Morning!!
  

и это должно было отображаться так

 Good Morning!!
Do you want to continue [Y/N]: y
Good Morning!!
Do you want to continue [Y/N]: y
Good Morning!!
Do you want to continue [Y/N]: n
  

Комментарии:

1. используйте continue в блоке else раньше System.out.println . docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html

2. Вам нужен случай, когда параметр равен «Y».

Ответ №1:

Вы просто проверяете, является ли это «N», но не «Y», поэтому он будет отображаться недопустимым для Y. Вам просто нужно добавить еще else if один и последний else с недопустимым.

 Scanner scan = new Scanner(System.in);
String option = new String("Y");

while (option.equalsIgnoreCase("Y")) {
    System.out.println("Good Morning!!");
    System.out.print("Do you want to continue [Y/N]: ");
    option = scan.nextLine();

    if (option.equalsIgnoreCase("N")) {
        break;

    }else if(option.equalsIgnoreCase("Y")){
        continue; 
    }else {
        System.out.println("invalid");
   }
}
  

Ответ №2:

 Scanner scan = new Scanner(System.in);

while (true) {
    System.out.println("Good Morning!!");
    System.out.print("Do you want to continue [Y/N]: ");
    String option = scan.nextLine().toUpperCase();

    if ("N".equals(option))
        break;
    if ("Y".equals(option))
        continue;

    System.out.println("invalid");
}
  

Комментарии:

1. Это не объясняет, какие были изменения и почему — это просто тупой код, который не особенно полезен.

Ответ №3:

Вы также можете реализовать else if проверку допустимого символа и удалить избыточную проверку из условия в while :

 while (true) {
    System.out.println("Good Morning!!");
    System.out.print("Do you want to continue [Y/N]: ");
    String option = scan.nextLine();

    if (option.equalsIgnoreCase("N")) {
        break;
    } else if (!option.equalsIgnoreCase("Y")) {
        System.out.println("invalid");
    }
}