2015-10-03 1 views
-1

, поэтому я немного запутался в следующем:Java: Do While with || и && операторов

При тестировании булева первое мое впечатление заключалось в использовании || оператора для условий. Это не сработало, цикл будет повторяться для правильного ответа. Но если бы я использовал оператор & &, тогда он оценил бы условия так, как я этого хотел.

Я чувствую, что это назад, и я не смотрю на это правильно. Может кто-нибудь объяснить это?

Чтобы сделать его более ясным, что я первоначально пытался сделать:

String input; 
Scanner keyboard = new Scanner(System.in); 

do 
{ 
    System.out.print("Enter one of the following names: John, Katie, Richard"); 
    input = keyboard.nextLine(); 
    input = input.toLowerCase(); 

} while (!input.equalsIgnoreCase("John") && !input.equalsIgnoreCase("Katie") && !input.equalsIgnoreCase("Richard")); 

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

Так что, если я вхожу в john, булев сначала проверяет это. ! (john = john), который равен FT = false. , так как я просто хочу проверить, совпадает ли он с Джоном, а не с Ричардом или Кати. Я бы хотел использовать || оператор. Почему бы мне также не захотеть проверить, равно ли это всем этим именам.

+0

Знаете ли вы, что '&&' делает? Знаете ли вы, что делает '||'? Что вас смущает? –

+0

Где находится 'mediumInput'? 'Keyboard.nextLine()' помещается в 'input'. –

+1

[Законы Де Моргана] (https://en.wikipedia.org/wiki/De_Morgan%27s_laws) могут быть полезны здесь – kuporific

ответ

0

Это основная логическая логика. Ваше утверждение эквивалентно !A && !B && !C - что в свою очередь эквивалентно !(A || B || C)

Самый простой способ рассуждать о них с помощью логических таблиц:

A B C | !A !B !C | !A && !B && !C | A || B || C | !(A || B || C) 
------+----------+----------------+-------------+--------------- 
F F F | T T T |  T  |  F  |  T  
T F F | F T T |  F  |  T  |  F  
F T F | T F T |  F  |  T  |  F  
T T F | F F T |  F  |  T  |  F  
F F T | T T F |  F  |  T  |  F  
T F T | F T F |  F  |  T  |  F  
F T T | T F F |  F  |  T  |  F  
T T T | F F F |  F  |  T  |  F  

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

0
while (!(mediumInput.compareToIgnoreCase("one") ==0 
    && !(mediumInput.compareToIgnoreCase("two") == 0) 
    && !(mediumInput.compareToIgnoreCase("three") == 0)); 

Слишком много двойных негативов здесь. Вы просто сбиваете с толку. Посмотрите на это следующим образом:

while (mediumInput.compareToIgnoreCase("one") != 0 
    && mediumInput.compareToIgnoreCase("two") != 0 
    && mediumInput.compareToIgnoreCase("three") != 0); 

Вы можете сразу увидеть, что использование || не будет иметь смысла. Вы не хотите зацикливать, когда любое из них является ложным: только тогда, когда все они.

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

  • Нет связанных вопросов^_^