2015-05-03 3 views
4

Мне нужна помощь с ПРОСТОЙ Y/N Условие для моей программы. Я действительно не работаю так, как хочу.Выполнение работы по эксплуатации Y/N

К сожалению, все другие темы, которые я нахожу, очень сбивают с толку. Я очень новичок в программировании.

Я хочу условие Y/N, которое не будет терпеть крах и не будет CASE SENSITIVE. поэтому, если Y или y возвращаются в другое меню, если n и N просто останавливают программу, и если что-то еще набирается в ней, она будет зацикливаться до тех пор, пока не будут выполнены условия Y или N.

Это то, что я писал:

String input = ScanString.nextLine(); 

while (!"Y".equals(input) || !"y".equals(input) || !"N".equals(input) || !"n".equals(input)) { 
    System.out.println("Please enter Y/N (Not case sensitive): "); 
    input = ScanString.nextLine(); 
} 

if ("Y".equals(input) || "y".equals(input)) { 
    meny1(); 
} else if ("N".equals(input) || "n".equals(input)) { 

} 

Когда он работает, то, что я вставил, он не будет нарушать время цикла.

+0

Вы можете явно использовать любой отступы вам нравится в вашем собственном коде, но это очень хорошая идея, чтобы использовать что-то последовательное и легко читаемый - - как для себя, так и при обращении к другим людям за помощью. Я отформатировал код в вашем вопросе для вас. –

+0

Возможный дубликат [Да/Нет с булевым или if/else?] (Http://stackoverflow.com/questions/15927885/yes-no-with-boolean-or-if-else) – Bobulous

+0

Ваше состояние всегда верно, следовательно, он продолжает цикл. Вы либо хотите использовать '! (Condition1 || condition2)' или '(! Condition1 &&! Condition2)'. Первый вариант выполняется быстрее, потому что оценка или условия останавливается, как только одно из них истинно. (Не очень большое дело для простой проблемы, как ваша, хотя) – sysconfig

ответ

8

while (!"Y".equals(input) || !"y".equals(input) ||... означает «держать зацикливание, пока вход не является„Y“или вход не„у“или ...». По определению, одно из этих условий всегда будет истинным.

Самый простой способ сделать то, что вы ищете бы регистрозависимости сравнение, и и (&&), а не или оператор:

while (!input.equalsIgnoreCase("Y") && !input.equalsIgnoreCase("N")) { 

Это означает, что «держать зацикливание время вход не «Y» или «у» и вход не «N» или «п»

или же в Yoda-говорить, потому что вы использовали Yoda-Speak:.

while (!"Y".equalsIgnoreCase(input) && !"N".equalsIgnoreCase(input)) { 
+0

+1. Это должно действительно получить галочку. Я часто создаю строки из переменной, чтобы сделать ее более понятной и статической. В этом случае может быть излишним, но тогда вы можете сделать YES.equalsIgnoreCase (ввод) ... – bphilipnyc

0

Попробуйте

while (!("Y".equalsIgnoreCase(input)) && !("N".equalsIgnoreCase(input))) { 

} 

Или

String[] validInputs = { "Y", "N" }; 
while(!Arrays.asList(validInputs).contains(input.toUpperCase())) { 

} 
Смежные вопросы