Java do loop - строка не может быть разрешена - PullRequest
2 голосов
/ 20 ноября 2011

Работа над простой игрой в кости с использованием методов, определенных программистом в Java.Поскольку я знаю, что программа должна быть запущена хотя бы один раз, а затем спросить, хочет ли игрок пойти снова, я решил использовать цикл do / while.Мне никогда не приходилось использовать его раньше, но я считаю, что настроил его правильно.

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

do {
    // main METHOD BODY ..

    String proceed = ui.nextLine();
    System.out.print("Would you like to play again (yes/no)? ");

} while (proceed.charAt(0) == 'Y' || proceed.charAt(0) == 'y');

То, что я получаю от Eclipse IDE на этом этапе, - «не удается решить проблему».

Есть какие-нибудь идеи относительно того, что происходит?

Ответы [ 3 ]

6 голосов
/ 20 ноября 2011

continue не находится в области видимости во время разыменования в цикле while. Переместите объявление переменной continue вне do.

String proceed;
do{

 main METHOD BODY

    proceed = ui.nextLine();
    System.out.print("Would you like to play again (yes/no)? ");

} while (proceed.charAt(0) == 'Y' || proceed.charAt(0) == 'y');
6 голосов
/ 20 ноября 2011

Вы должны объявить это вне do.

String proceed = null;
do {
  ...    
  proceed = ui.nextLine(); 
  ...    
} while (proceed.charAt(0) == 'Y' || proceed.charAt(0) == 'y'); 

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

0 голосов
/ 20 ноября 2011

Вместо того, чтобы изначально установить для этого параметра значение null, а затем присвоить ему значение, лучше просто определить его значение как N, чтобы другой кодер, который приходит, не подразумевал поведения, связанного с нулем, и действовал соответствующим образом.Это значение должно быть 1 из 2 вещей ... Y или N, не инициализируйте его чем-то отличным от двух предполагаемых значений.

Вы также можете изменить это, хотя условие будет немного чище, используяМетод есть.Это более наглядное описание того, что вы хотите сделать, и вы можете выполнить модульное тестирование условия.

С изменениями, которые составляют:

String proceed="N";
while (this.playAgain(proceed)) { //playAgain performs the same test as you have in your while
     //your code
}

Во-вторых, для вашего кода, который намеренно оторван, убедитесь, чтоон состоит из чего-то вроде:

Game game = new Game();
game.play();

Если у вас гораздо больше кода, это слишком много в одном месте.

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