Проверьте ввод с клавиатуры, если пусто ИЛИ не «Y» ИЛИ не «X» - PullRequest
0 голосов
/ 16 мая 2018

Я хочу проверить мой ввод, он пустой или нет "Y" или нет "X"

while (weiterInput.isEmpty() || !weiterInput.equals("X") || !weiterInput.equals("Y")) {..}

Если я введу "X" или "Y", он не выйдет из цикла, как положенок.

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Вы перепутали свою логику.

Если вы хотите проверить, является ли он пустым или равен X или равен Y, это будет

(weiterInput.isEmpty() || weiterInput.equals("X") || weiterInput.equals("Y"))

Если вы хотите напротив этого, просто отрицание всего выражения

(!(weiterInput.isEmpty() || weiterInput.equals("X") || weiterInput.equals("Y")))
0 голосов
/ 16 мая 2018

Я думаю, все, что вам нужно, это просто:

while (!weiterInput.matches("[XY]?")){...}

Редактировать:

Я также могу проверить строчные и другие варианты (да, ДА, Да, y, Y) с меньшим количеством кода

В этом случае просто измените регулярное выражение на:

if (!weiterInput.matches("(?i)(yes|y)?")){

Обратите внимание, что (?i) будет соответствовать регистронезависимому, поэтому небеспокоиться о ДА, да, Y ..

0 голосов
/ 16 мая 2018

Этот цикл никогда не прекратится, поскольку weiterInput никогда не будет равен и "X", и "Y", поэтому либо !weiterInput.equals("X"), либо !weiterInput.equals("Y") всегда будет равно true.

Вам нужно:

while (weiterInput.isEmpty() ||
      (!weiterInput.equals("X") && !weiterInput.equals("Y"))) {            

}
...