Scanner choice = new Scanner(System.in);
    while(!choice.hasNextInt()) {
        System.out.println("Invalid input");
        choice.next();
    }

    // Carry out appropriate method relating to user choice
    boolean done = false; // Loop is not finished
    while (!done) {
        int i = choice.nextInt(); // Save the user's choice as int i
        /*
         * A switch statement here would probably be more elegant but this works too
         * Problem: If the user inputs a non-integer number e.g. 2.3 the program explodes :(
         */
        if (i == 1) {
            newGame(); // Call newGame method
        } else if (i == 2) {
            playGame(); // Call playGame method
        } else if (i == 3) {
            viewResults(); // Call viewResults method
        } else if (i == 4) {
            done = true; // If user quits, the loop is done
            quitGame(); // Call quitGame method
        } else {
            System.out.println("Invalid input");
        }
    }


唯一有效的输入必须是数字1、2、3和4。如果我输入一个字符串,它将不接受它。如果我输入的数字大于4,则不接受。但是,如果我要输入2.3或其他内容,程序将崩溃。我看不到它是什么引起的,因为2.3不是整数,我也不知道它是如何通过Scanner中的hasNextInt()方法的。有人照亮了吗?

最佳答案

对于输入2.,第一个int是2,因此会执行playGame(),但done仍是false,因此由于while(!done)循环,再次在choice.nextInt()上调用.,这不是诠释

因此,例外。

关于java - Scanner类的hasNextInt()方法似乎允许十进制通过,或者可能是由其他原因引起的。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23194368/

10-10 03:03