Не можете выйти из этого цикла? - PullRequest
0 голосов
/ 28 октября 2018

Я написал простую игру в догадки, которая использует цикл while. Если пользователь вводит любое слово с инициалом «y», игра запускается снова, но если пользователь вводит любое другое слово, игра завершается и выдает отчет.

public static void loopcalc(Scanner console) {
  int totalRounds = 0, totalGuesses = 0, best = 1000000;
  boolean want = true;

  while (want = true) {
    int eachguess = playOneGame(console);
    totalRounds++;
    totalGuesses += eachguess;

    System.out.println("Do you want to play again?");
    String input = console.next();

    if (input.toLowerCase().charAt(0) == 'y') {
      want = true;
    } else {
      want = false;
    }
    best = Math.min(eachguess, best);
  }
  report(console, totalGuesses, totalRounds, best);
}

Извините, я не знаю, как правильно набирать коды.

Ответы [ 3 ]

0 голосов
/ 28 октября 2018

= в want = true является оператором присваивания.Вместо этого вы должны попробовать оператор равенства ==.

while(want == true) или while(want)

0 голосов
/ 29 октября 2018

Это ваш обновленный ответ.

public static void loopcalc(Scanner console) {
  int totalRounds = 0, totalGuesses = 0, best = 1000000;
  boolean want = true;

  while (want) {
    int eachguess = playOneGame(console);
    totalRounds++;
    totalGuesses += eachguess;

    System.out.println("Do you want to play again?");
    String input = console.next();

    if (input.toLowerCase().charAt(0) == 'y') {
      want = true;
    } else {
      want = false;
    }
    best = Math.min(eachguess, best);
  }
  report(console, totalGuesses, totalRounds, best);
}

Вы также можете попробовать следующий подход и избавиться от переменной want:

public static void loopcalc(Scanner console) {
int totalRounds = 0, totalGuesses = 0, best = 1000000;
boolean want = true;

while (true) {
int eachguess = playOneGame(console);
totalRounds++;
totalGuesses += eachguess;

System.out.println("Do you want to play again?");
String input = console.next();

if (input.toLowerCase().charAt(0) == 'n') {
  break;
}
best = Math.min(eachguess, best);
}
report(console, totalGuesses, totalRounds, best);
}
0 голосов
/ 28 октября 2018

Вы писали:

while(want = true) {

Вы наверняка хотите проверить, является ли want true. Поэтому напишите вместо:

while(want == true) {

Или лучше:

while(want) {

В Java = - это оператор, который присваивает значение переменной. Возвращает также значение. Итак, когда вы набираете wanted = true, вы:

  • Установить want на true
  • Возврат true

Здесь while возвращает, получает true и продолжает цикл бесконечно.

PS: это очень частая проблема. В 2003 году знаменитая попытка вставить бэкдор в ядро ​​Linux использовала эту функцию (она есть и в языке C).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...