Java猜测游戏循环错误

时间:2015-06-28 19:15:42

标签: java exception-handling

我正在尝试创建一个简单的游戏。我确定这只是一个简单的错误,但我似乎无法得到它。实际上有两个错误,一个是它每次经过后都没有增加numOfTries,另一个是它没有正确处理异常。我希望它在输入不是整数时输出一个字符串。如何解决这两个错误?

/*
 * Guessing game
 */

import java.util.*;

public class GuessNumber {

    public static void main(String[] args) {
        Scanner input = new Scanner(System. in );
        guess(input);
        System.out.println("You got it correct after " + guess(input) + " tries");
    }

    public static int guess(Scanner input) {
        Random randomNumber = new Random();
        int numToGuess = randomNumber.nextInt(10);
        int numOfTries = 0;
        String prompt = "Enter your guess (integer from 1 to 10)";
        numOfTries++;
        getInt(input, prompt);
        if (getInt(input, prompt) == numToGuess) {
            return numOfTries;
        } else if (getInt(input, prompt) != numToGuess) {
            getInt(input, prompt);
        }
        return numOfTries;
    }

    public static int getInt(Scanner input, String prompt) {
        int userGuess = 0;
        System.out.println(prompt);
        try {
            userGuess = input.nextInt();
        } catch (Exception e) {
            System.out.println("You didn't enter an int");
        }
        return userGuess;
    }
}

1 个答案:

答案 0 :(得分:1)

一些事情:

  1. 你两次不同地调用guess()两次。函数中的局部变量不能在函数调用之间保持它们的值,这可能是你不认为numTries正在递增的原因。此外,通过调用它两次,你强制用户猜测两个可能不同的随机数(也就是你玩游戏两次)。你也有同样的问题getInt()。

  2. 您调用nextInt(10)的方式将为您提供0到9之间的数字。你永远不会得到10,而且这个人永远不会猜0,因为提示告诉他不要。

  3. 每次调用guess时,您只是让用户尝试一次,因此numTries正在递增并返回,但只返回一次,每次返回值为1。为了让用户多次猜测,请将while循环放入。

  4. 当您进行异常处理时,应将其置于循环中,以便用户输入输入,直到输入有效的int。

    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        int guesses = guess(input);
        System.out.println("You got it correct after " + guesses + " tries");
    }
    
    public static int guess(Scanner input)
    {
        String prompt = "Enter your guess (integer from 1 to 10)";
        Random randomNumber = new Random();
        numToGuess = randomNumber.nextInt(10) + 1;    //+1 to make it 1-10 inclusive
        numTries = 0;
    
        while (getInt(input, prompt) != numToGuess)
        {
            numTries++;
        }
    
        return numTries;
    }
    
    public static int getInt(Scanner input, String prompt)
    {
        int userGuess = -1;
        boolean valid = false;
        System.out.println(prompt);
    
        while (!valid)
        {
            try
            {
                userGuess = input.nextInt();
                valid = true;
            }
            catch (NumberFormatException e)
            {
                System.out.println("You did not enter an int. Try again");
            }
        }
    
        return userGuess;
    }