Как проверить, является ли введенная пользователем строка определенной буквой в 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.
Надеюсь это поможет.