Как проверить, является ли введенная пользователем строка определенной буквой в Java?

Я знаю, что это дублирующий вопрос, но мой вопрос больше касается логических операторов: я строю простую игру "камень, ножницы, бумага". Каждый игрок должен ввести "R", "P" или "S".

Это простое утверждение

if (!p1Input.equals("R") || !p1Input.equals("P") || !p1Input.equals("S")) {
    System.out.println("Player one, not a valid input.")
}

следует запустить оператор печати, если строка не те три буквы. Однако, даже если строка равна одной из букв, она все равно выводит неверный ввод.

В качестве альтернативы я могу сделать

if (p1Input.equals("R") || p1Input.equals("P") || p1Input.equals("S"))

И это работает, но мне нужно включить вход плеера 2, чтобы с

if (p1Input.equals("R") || p1Input.equals("P") || p1Input.equals("S") && p2Input.equals("R") || p2Input.equals("P") || p2Input.equals("S"))

но оператор печатает только недействительно, если оба входа игрока не R,S или P. Я не уверен, какие операторы && или || использовать и где. Предпочтительно я хочу использовать условие "не равно"

2 ответа

Это проблема с вашей логической логикой. По сути, при проверке ввода вы говорите своей программе: "если ввод отличается от R или P или S, он недействителен". Ну, допустим, что пользователь печатает "P". "P" отличается от "R" и отличается от "S", поэтому ваша программа сочтет его недействительным. Вместо этого торгуйте оператором "ИЛИ" (||) для оператора "И" (&&), как показано ниже:

if (!p1Input.equals("R") && !p1Input.equals("P") && !p1Input.equals("S")) {
    System.out.println("Player one, not a valid input.")
}

Теперь вы говорите своей программе, что ввод недопустим, когда он отличается, в то же время, от "R", "P" и "S" (поэтому это не может быть любая из этих букв).

Кроме того, вы можете попробовать решение с помощью регулярных выражений как:
if(!p1Input.matches("P|R|S")): это условие будет выполнено, когда ввод неверен, т.е. P, R or S, Точно так же вы можете включить логику для player2.
Надеюсь это поможет.

Другие вопросы по тегам