Если оператор для обработки неожиданных ответов от пользователей для угадать номер программы не работает - PullRequest
0 голосов
/ 21 декабря 2018

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

Правильно, я не использую оператор if, который не компилируется, и я не уверен, почему.

while (!text.equals("yes")){
  System.out.println("Is your number " + (guess) + "?");
  System.out.println("yes,higher,or lower");
  text = reader.nextLine();

  if (text.equals("higher")){
    min = guess + 1;
  }

  if (text.equals("lower")){
    max = guess - 1;
  }
  guess = (max + min)/2;

  if (text.equals("yes")){
    System.out.println("Yay! I guessed it.");
  }

  if (!text.equals("yes" || "higher" || "lower" || "ok")){
    System.out.println ("I dont understand " + (text));
    System.out.println("Is your number " + (guess) + "?");
    System.out.println("yes,higher,or lower");
  }
}

Желаемый результат

Think of a number between 1 and 1000
Type ok when you're ready
 ready
 You said ready
 I guess that means you're ready
 Don't forget your number
Is your number 500?
 yes, higher, or lower
 no
 I don't understand no
 Is your number 500?
 yes, higher, or lower
  lower
 Is your number 250?
 yes, higher, or lower
 yes
Yay! I guessed it
=======
//error with my code
exit status 1
Main.java:38: error: bad operand types for binary operator '||'
      if (!text.equals("yes" || "higher" || "lower" || "ok")){
                         ^
   first type:  String
  second type: String
 1 error

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018

Я думаю, что вы ищете:

if (!text.matches("yes|higher|lower|ok")) {

  // ...

}

Здесь вы проверяете, соответствует ли строка text любому из следующих строк :

  • да

  • выше

  • ниже

  • ок
0 голосов
/ 21 декабря 2018

Вы можете изменить условие if на, и это будет делать

text.matches("yes|higher|lower|ok")
0 голосов
/ 21 декабря 2018

Заявление должно быть:

if (!(text.equals("yes") || text.equals("higher") || 
      text.equals("lower") || text.equals("ok"))) {
    ...
}

В любом случае, я бы рекомендовал использовать switch вместо:

switch(text) {
    case "lower":
        ...
        break;

    ... 

    default:
        System.out.println ("I dont understand " + (text));
        ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...