2016-01-13 3 views
0

У меня проблема с этим методом. Во-первых, он продолжает говорить мне, что мне нужно добавить возврат, я добавляю возврат в if if check. Вторая проблема заключается в том, что просто не выполняется цикл. Когда я добавляю возврат после инструкции if else, чтобы просто проверить цикл (удаляет ошибку возврата добавления), он просто проходит через него один раз, независимо от того, что вводит пользователь. Мы ценим любые предложения.Do While while и if else оператор не работает правильно

public static boolean newGame() { 

    // char variables for the user input 
    char yes = 'y'; 
    char no = 'n'; 

    // Request for user input 
    Scanner userInput = new Scanner(System.in); 
    System.out.println("Are you ready to play? Press \"y\" for Yes and \"n\" for No."); 

    // converts userInput to a char 
    String userChoice = userInput.nextLine(); 
    char userChar = userChoice.charAt(0); 

    do { 
    // determines if the game starts or not 
     if (userChar == yes) { 
      System.out.println("GREAT!! Let's play!"); 
      return true; 
     } else if (userChar == no) { 
      System.out.println("Thanks for playing!!"); 
      return false; 
     } else { 
      System.out.println("Please enter \"y\" or \"n\""); 
     } 
    } while (userChar != yes || userChar != no); 
} 
+1

цикл бесконечен, поскольку userChar никогда не изменяется внутри цикла, также если вы делаете его логическим, вы ДОЛЖНЫ возвращать логическое значение. – ivan

+0

Использовать .equals и && в условии, с || это всегда верно – Ctx

+0

@Ctx '==' и '! =' будет работать здесь; значения - 'char'. – rgettman

ответ

4

Для начала, он продолжает говорить мне, что нужно добавить возвращение, я добавляю возвращение в если еще чеке.

Java не будет оценивать цикл, чтобы определить, что он может логически возвращать только true или false внутри цикла и не вырваться из петли, как мы можем видеть.

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

// end of while loop 
throw new IllegalStateException("Didn't expect to make it to this point!"); 

он просто проходит через него один раз, независимо от того, что входы пользователей.

Это всегда так, что char не 'y'или не 'n'. Вы хотите убедиться, что это еще не повторилось, с оператором && («и»). Держите петлю, если символ не 'y'и это не 'n'.

} while (userChar != yes && userChar != no); 

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

0

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

public static boolean newGame() { 

    // char variables for the user input 
    char yes = 'y'; 
    char no = 'n'; 

    // Request for user input 
    Scanner userInput = new Scanner(System.in); 
    System.out.println("Are you ready to play? Press \"y\" for Yes and \"n\" for No."); 


    do { 
     // converts userInput to a char 
     String userChoice = userInput.nextLine(); 
     char userChar = userChoice.charAt(0); 
    // determines if the game starts or not 
     if (userChar == yes) { 
      System.out.println("GREAT!! Let's play!"); 
      return true; 
     } else if (userChar == no) { 
      System.out.println("Thanks for playing!!"); 
      return false; 
     } else { 
      System.out.println("Please enter \"y\" or \"n\""); 
     } 
    } while (userChar != yes && userChar != no); 
} 
Смежные вопросы