Почему Java не понимает условие? [дубликат]

109
25 марта 2021, 13:00
На этот вопрос уже даны ответы здесь:
Как сравнивать строки в Java? (2 ответа)
Закрыт 1 год назад.
 System.out.println("Все верно?(y/n)");
 Scanner answ = new Scanner(System.in);
if (answ.nextLine() == "y")
   System.out.println("Ok");
if (answ.nextLine() == "n")
    System.out.println("Try again");
else
    System.out.println("Неверный ввод(y/n)");

Выдает:

Все верно?(y/n)

y // Пишу 'y'

y // Но он опять пытается считать ввод, ввожу опять 'y'

Неверный ввод(y/n) //И в итоге выводит это

Answer 1

Вы сравниваете строки оператором ==, когда это нужно делать с помощью метода equals().

string1.equals(string2);

Оператор == сравнивает не объекты, а ссылки на них, если это не примитивные типы.

Второй оператор if у вас не связан с первым посредством else.

Также вы не сохранили значение считанной строки, вместо этого вы вызвали метод nextLine() для каждого оператора if, из-за чего второе условие не срабатывает, если ввести "n", а просит сделать ввод ещё раз.

Исправленный код будет выглядеть так:

System.out.println("Все верно?(y/n)");
Scanner answ = new Scanner(System.in);
String answer = answ.nextLine();
if (answer.equals("y"))
   System.out.println("Ok");
else if (answer.equals("n"))
    System.out.println("Try again");
else
    System.out.println("Неверный ввод(y/n)");
READ ALSO
Как при помощи регулярного выражения разделить строку по пробелам на знаки и числа?

Как при помощи регулярного выражения разделить строку по пробелам на знаки и числа?

Нужно чтобы строка типа "+ 5 7" делилась на знак, число, числоЗнак любой, число любое

118
A collection with cascade=“all-delete-orphan” was no longer referenced by the owning entity instance

A collection with cascade=“all-delete-orphan” was no longer referenced by the owning entity instance

Помогите разобраться с мистическим поведениемИмеется сущность

92