2014-10-14 2 views
1

Я пишу простую программу угадывания игр, в которой пользователь вводит число, чтобы попытаться угадать произвольно сгенерированное число.Пользовательский ввод для повторной программы в Java

Если они получают правильное число, я хочу дать им возможность играть снова.

Вот мой код:

public class GuessingGame { 
    private Random num = new Random();  
    private int answer = num.nextInt(10); 
    private int guess; 
    private String playAgain; 

    public void inputGuess(){ 
     System.out.println("Enter a number between 1 and 10 as your first guess: "); 
     Scanner input = new Scanner(System.in); 
     guess = input.nextInt(); 
     do{ 
     if (guess < 1 || guess > 10){ 
      System.out.println("That is not a valid entry. Please try again: "); 
      guess = input.nextInt(); 
     }else if (guess > answer){ 
      System.out.println("Too high, Try Again: "); 
      guess = input.nextInt(); 
     }else if (guess < answer){ 
      System.out.println("Too low, Try Again: "); 
      guess = input.nextInt(); 
     } 

     }while (guess != answer); 

     System.out.println("Congratulations, You guessed the number!"); 
     System.out.println("Would you like to play again? Enter Y to play or any other key to quit: "); 
     playAgain = input.nextLine(); 
     if(playAgain == "Y" || playAgain == "y"){ 
      System.out.println("Enter a number between 1 and 10 as your first guess: "); 
      guess = input.nextInt(); 
     } 

    } 
} 

Игра играет через но когда пользователю будет предложено играть снова ничего не происходит?

Любые предложения?

+4

Не сравнивать строки с ==. Вместо этого, если (playAgain.equals («Y»)). – Arvy

+0

вам нужен еще один цикл –

+0

Когда пользователь вводит «Y», вам нужно снова запустить цикл. – Susie

ответ

1

Вот завершенный код, полностью рабочий и протестирован ... без использования рекурсии .. и все исправить.

public static void main(String[] args) 
    { 
    String playAgain = ""; 
    Scanner scan = new Scanner(System.in); 

    do 
    { 
     ClassName.inputGuess(); 
     System.out.println("Would you like to play again? Enter Y to play or any other key to quit: "); 
     playAgain = scan.nextLine(); 
    } 
    while(playAgain.equalsIgnoreCase("Y")); 
    System.out.println("Thanks for playing!"); 
} 

public void inputGuess() 
{ 
    Random num = new Random(); 
    int answer = num.nextInt(10)+1; 
    Scanner input = new Scanner(System.in); 
    int guess; 

    System.out.println("Enter a number between 1 and 10 as your first guess: "); 
    guess = input.nextInt(); 

    do 
    { 
     if (guess < 1 || guess > 10) 
     { 
      System.out.println("That is not a valid entry. Please try again: "); 
      guess = input.nextInt(); 
     } 
     else 
      if (guess > answer) 
      { 
       System.out.println("Too high, Try Again: "); 
       guess = input.nextInt(); 
      } 
      else 
       if (guess < answer) 
       { 
        System.out.println("Too low, Try Again: "); 
        guess = input.nextInt(); 
       } 
     input.nextLine(); 

    } 
    while (guess != answer); 

    System.out.println("Congratulations, You guessed the number!"); 
} 
+0

Это работает, но у меня есть несколько вопросов. В конце do/while в inputGuess вы включили input.nextLine(); Почему это? У меня его нет в моем коде, и он отлично работает. – Mac

+0

Также почему вы должны инициализировать строку playAgain в main с помощью ""; – Mac

+0

@macattack Для ввода улова возвращаемого символа (\ n) был введен вход .nextLine(), он может работать без него ...и я инициализировал строку playAgain внутри main на «» для инициализации ... нет конкретной причины. – user2494817

0

один вопрос:

Не сравнить содержимое двух строк по ==, которые просто вы должны использовать equals()

Представьте себе правильный ответ один в этом случае

Следуйте за этим как ваш образец с голубой печатью

int answer = 0; 
    String yes = ""; 
    Scanner input = new Scanner(System.in); 
    do{ 
    do{ 
     System.out.println("Enter your number"); 
     answer = input.nextInt(); 
    } while (answer != 1); 
     System.out.println("Would you like to play again?"); 
     yes = input.next(); 
    } while (yes.equalsIgnoreCase("yes")); 

выход:

enter image description here

+0

-1 для некомпетентности –

+0

@SamIam теперь лучше? –

1

Вот код:

private Random num = new Random(); 

private int answer = num.nextInt(10) +1; 

private int guess; 

private String playAgain; 

Scanner input = new Scanner(System.in); 

public void inputGuess(){ 
    System.out.println("Enter a number between 1 and 10 as your first guess: "); 

    guess = input.nextInt(); 
    do{ 
     if (guess < 1 || guess > 10){ 
      System.out.println("That is not a valid entry. Please try again: "); 
      guess = input.nextInt(); 
     }else if (guess > answer){ 
      System.out.println("Too high, Try Again: "); 
      guess = input.nextInt(); 
     }else if (guess < answer){ 
      System.out.println("Too low, Try Again: "); 
      guess = input.nextInt(); 
     } 

     if(guess == answer) { 
      System.out.println("Congratulations, You guessed the number!"); 
      System.out.println("Would you like to play again? Enter Y to play or any other key to quit: "); 
      playAgain = input.nextLine(); 
     } 

    }while (!playAgain.equals("Y") && !playAgain.equals("y")); 
} 

Вам просто нужно ввести выигрыш/проигрыш логики внутри время, и состояние будет концовка/флаг продолжени ,

Другое дело, всегда помните, при сравнении строк использовать равно метод, так как == сравнивает ссылку на объект, а не строковое значение, а в некоторых случаях == возвращает истину для равной строки, так как JVM магазины Строки, но обязательно всегда используйте равно.

+0

Ваш код не проверяет, является ли случайным значение от «1 до 10». В этом случае ответ может быть от «0 до 9». –

+0

Вы правы Элвин, чтобы сделать это от «1 до 10», нам нужно добавить 1, я отредактирую ответ. Благодаря! –

0

попробовать что-то вроде этого:

public void inputGuess(){ 
     System.out.println("Enter a number between 1 and 10 as your first guess: "); 
     Scanner input = new Scanner(System.in); 
     guess = input.nextInt(); 
     playAgain = "Y"; 
     do{ 
     if (guess < 1 || guess > 10){ 
      System.out.println("That is not a valid entry. Please try again: "); 
      guess = input.nextInt(); 
     }else if (guess > answer){ 
      System.out.println("Too high, Try Again: "); 
      guess = input.nextInt(); 
     }else if (guess < answer){ 
      System.out.println("Too low, Try Again: "); 
      guess = input.nextInt(); 
     } 

     if(guess == answer) 
     { 
      System.out.println("Congratulations, You guessed the number!"); 
      System.out.println("Would you like to play again? Enter Y to play or N to quit: "); 
      input.nextLine(); 
      playAgain = input.next(); 
      answer = num.nextInt(10); 
      guess = -1; 
      if(!playAgain.equalsIgnoreCase("N")) 
      { 
       System.out.println("Enter a number between 1 and 10 as your first guess: "); 
       guess = input.nextInt(); 
      } 
     } 

     }while (!playAgain.equalsIgnoreCase("N")); 

    } 

Вам потребуется код для проверки, если они хотят играть снова внутри цикла. Таким образом, вы подождете, пока они правильно догадались, и спросите, хотите ли они снова играть. Если это произойдет, перезапустите процесс, если они не выйдут из цикла.

0

Некоторые из решений, которые я вижу выше, неверны. Случайное число, вам нужно добавить 1, чтобы получить от 1 до 10, также вам нужно сравнить с равными. Здесь я использую регистр без учета регистра.

Следующий код работает так, как вам это нужно.

import java.util.Random; 
import java.util.Scanner; 

public class Test2 { 
    private static Random num = new Random(); 
    private static int answer = 0; 
    private static int guess; 
    private static String playAgain; 

    public static void main(String[] args) { 
     inputGuess(); 
    } 

    // Guess Method. 
    public static void inputGuess(){ 
     // create answer. 
     answer = 1+ num.nextInt(10); 

     System.out.println("Enter a number between 1 and 10 as your first guess: "); 
     Scanner input = new Scanner(System.in); 
     guess = input.nextInt(); 
     do{ 
     if (guess < 1 || guess > 10){ 
      System.out.println("That is not a valid entry. Please try again: "); 
      guess = input.nextInt(); 
     }else if (guess > answer){ 
      System.out.println("Too high, Try Again: "); 
      guess = input.nextInt(); 
     }else if (guess < answer){ 
      System.out.println("Too low, Try Again: "); 
      guess = input.nextInt(); 
     } 

     }while (guess != answer); 

     System.out.println("Congratulations, You guessed the number!"); 
     System.out.println("Would you like to play again? Enter Y to play or any other key to quit: "); 
     playAgain = input.nextLine(); 
     if(playAgain.equalsIgnoreCase("Y")){ 
      inputGuess(); 
     } 

    } 
} 
+2

Рекурсивный ... Не так уж хорошо ... – user2494817

+0

Что вы имеете в виду @ user2494817? Почему рекурсия - плохая идея для оператора if? –

+1

@ user2494817 Использование рекурсии следует избегать как можно больше. Но в случае с ОП я думаю, что проблем нет. Код OP будет слишком сильно изменяться, если этого не сделать. И скорость здесь не проблема. Это просто простая программа. – afzalex

2

Выполните следующие действия, и ваш код будет работать:

  1. Заменить все input.nextInt(); с Integer.parseInt(input.nextLine());
  2. Заменить (playAgain == "Y" || playAgain == "y") с (playAgain.equalsIgnoreCase("Y"))
  3. Initialise answer внутри inputGuess() в старте вместо этого.
  4. Заменить тело из if(playAgain.equalIgnoreCase("Y")) с inputGuess();

При вводе целочисленного значения через консоль также содержать \n (следующая строка) в ней. Но когда вы используете nextInt(), он не читает это \n, но затем, когда вы пытались получить следующую строку с input.nextLine(), она ищет \n (следующая строка), которая уже существует из целочисленной записи и ничего не имеет после этого. Код ищет «Y» или «y» и ломается, потому что не найден ни один из них.

Именно поэтому Integer.parseInt(input.nextLine()); здесь работает

0

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

public class Test { 
    public static void main (String...a) { 
     inputGuess(); 
    } 
    public static void inputGuess() { 

     Scanner input = new Scanner(System.in); 
     String playAgain = "Y"; 
     int guess; 
     Random ran = new Random(); 
     int answer = ran.nextInt(10) + 1; 
     while (playAgain.equalsIgnoreCase("Y")) { 
      System.out.println("Enter a number between 1 and 10 as your first guess: " + answer); 
      guess = input.nextInt(); 
      do { 
       if (guess < 1 || guess > 10) { 
        System.out.println("That is not a valid entry. Please try again: "); 
        guess = input.nextInt(); 
       } else if (guess > answer) { 
        System.out.println("Too high, Try Again: "); 
        guess = input.nextInt(); 
       } else if (guess < answer) { 
        System.out.println("Too low, Try Again: "); 
        guess = input.nextInt(); 
       } 
      } while (guess != answer); 

      System.out.println("Congratulations, You guessed the number!"); 
      System.out.println("Would you like to play again? Enter Y to play or any other key to quit: "); 
      input.nextLine(); 
      playAgain = input.nextLine(); 
      answer = ran.nextInt(10) + 1 
     }   
    } 
} 
0

Этот код может служить вашей цели ...

import java.util.Random; 
import java.util.Scanner; 

public class GuessingGame 
{ 
private Random num = new Random(); 
private int answer ; 
private int guess; 
private String playAgain; 

public void inputGuess() 
{   
    answer = num.nextInt(11); 
    System.out.println("Enter a number between 1 and 10 as your first guess: "); 
    Scanner input = new Scanner(System.in); 
    guess = input.nextInt(); 
    do {    
     if (guess < 1 || guess > 10) { 
      System.out 
        .println("That is not a valid entry. Please try again: "); 
      guess = input.nextInt(); 
     } else if (guess > answer) { 
      System.out.println("Too high, Try Again: "); 
      guess = input.nextInt(); 
     } else if (guess < answer) { 
      System.out.println("Too low, Try Again: "); 
      guess = input.nextInt(); 
     } 

    } while (guess != answer); 

    System.out.println("Congratulations, You guessed the number!"); 
    System.out.println("Would you like to play again? Enter Y to play or any other key to quit: "); 
    do 
    {   
     playAgain = input.nextLine(); 

    }while(playAgain.length()<1); 

    if (playAgain.trim().equalsIgnoreCase("y")) 
    { 
     inputGuess();   
    } 
    else 
    { 
     System.out.println("Good Bye!!!"); 
    } 

} 

public static void main(String[] args) { 
    new GuessingGame().inputGuess(); 
} 
    }