2013-01-26 4 views
0
Scanner input = new Scanner(System.in); 
selection = input.nextInt(); 
while (selection != 1 || selection != 2 || selection != 3 || selection != 4){ 
    System.out.println("*"); 
    selection = input.nextInt(); 
} 

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

Все знаки или знаки были заменены на & & знаков, но он по-прежнему сохраняет цикличность?

+0

Когда нужно выход из цикла? Когда вы изменили все '||' на '&&', он выйдет, например. при выборе '1' – MrSmith42

ответ

4

заменить

while (selection != 1 || selection != 2 || selection != 3 || selection != 4) 

по

while (selection != 1 && selection != 2 && selection != 3 && selection != 4) 

выбора! = 1 || выбор! = 2 is always true because выбор` не может быть 1 и не быть 2.

+0

+1 Demorgans therom. Нужно прочесть основы. –

+0

Моя ошибка, извините. Благодаря! – user1861156

+0

@subirkumarsao это не [Закон ДеМоргана] (http://en.wikipedia.org/wiki/DeMorgan%27s_Law). –

1

Ваше состояние всегда верно. Для любого числа, которое вы выбрали, оно всегда не 1 или не 2. 1 равно, равное 1, но оно не равно 2, поэтому условие истинно, равно 2 равно 1, поэтому условие истинно. Каждое другое число не равно 1 или 2, поэтому условие по-прежнему остается в силе.

1

while будет выполнять блок, если выражение не будет ложным. selection != 1 || selection != 2 всегда верно.

Я думаю, что вы хотите изменить != к == или еще лучше

while (0 < selection && selection <= 4) 
Смежные вопросы