2015-12-05 7 views
2

Я хотел бы, чтобы цикл while выполнялся всякий раз, когда пользователь вводит значение, отличное от «stop» или «continue» при игнорировании case. Как я могу это сделать? Всякий раз, когда я запускаю программу, он печатает «Недопустимая запись», даже если я набираю продолжение или остановку. Что я делаю не так?Java: Что эквивалентно! = При сравнении строк?

package butt; 

    import java.util.*; // used for console input 

    public class butt_face{ 

    static Scanner console = new Scanner(System.in); // needed for user input 

    public static void main(String[] args) { 

    String strContinue; // input from console and used for boolean 

    System.out.println("Would you like to stop or continue? "); 
    strContinue = console.next(); 
    while(!(strContinue.equalsIgnoreCase("stop")) || !(strContinue.equalsIgnoreCase("continue"))) 
     { 
      System.out.println("Invalid entry"); 
      System.out.println("Would you like to stop or continue? "); 
      strContinue = console.next(); 
     } // end while 
    if(strContinue.equalsIgnoreCase("stop") 
    { 
     System.out.println("Good bye!"); 
    } // end if 
    else 
     System.out.println("Poop Ship Destroyer"); 

    } // end of main 

    } // end of class 
+5

'! Str.equals()' –

+0

Можете ли вы быть более конкретными? – Boognish

+3

Конкретнее? Он написал код для вас. Посмотрите на это и подумайте. – duffymo

ответ

7

Вы ошиблись оператор:

!(strContinue.equalsIgnoreCase("stop")) 

является true если strContinue не "stop".

!(strContinue.equalsIgnoreCase("continue")) 

является true если strContinue не "continue".

strContinue не может быть одновременно "stop" и "continue", следовательно, по меньшей мере, одно из условий, всегда будет true и false || true является true.

Решение: изменить или (||) на (&&).

+0

Большое вам спасибо! – Boognish

+0

@Boognish Если вы нашли этот ответ полезным, не стесняйтесь повышать и принимать его! – ricky3350

-5

Сделайте что-то вроде функции ввода, которая вызывает входной сканер, пока вы не введете одну из этих двух строк.

+2

Зачем вам вызывать функции для простого сравнения двух строк? –

+0

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

+2

Ну, его (то есть ОП) «точка» на самом деле необоснованна. Но >> реальная точка << заключается в том, что он совершил основную логическую ошибку в своем коде. В вашем ответе ничего не говорится об адресе. –

0

Вопрос в вашей логике.

while(!(strContinue.equalsIgnoreCase("stop")) || ! (strContinue.equalsIgnoreCase("continue"))) 

Эта часть проверяет strContinue равно прекратиться, если оно равно остановить его будет проверить strContinue равно продолжить.

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