为什么我的代码必须输入两个输入才能开始运行?

我在代码中使用 while 语句,用户在 while 语句内输入一个数字。要停止程序循环,用户必须输入“停止”一词。但是,一旦我输入一个数字,输出就会跳到另一行,而不打印我希望它打印的语句,并且我必须再次输入所需的输入以使程序开始循环。唯一不会发生此问题的情况是当用户首先输入“stop”时,代码就可以正常工作。


这是为了找到任意数量的用户输入数字的最大值、最小值和平均值。我尝试更改 else/if 语句的顺序以及所述 else/if 语句的参数,但似乎没有任何效果。


    boolean stopped = false;


    int numberAmount = 0;

    int invalidAmount = 0;


    double max = Integer.MIN_VALUE;

    double min = Integer.MAX_VALUE;

    double mean = 0;        


    while(stopped == false)

    {   

        System.out.print("Enter a number (type "+"\""+"stop"+"\""+" to stop): ");

        String originalInput = userInput.nextLine();


        if(originalInput.equals("stop"))

        {

            stopped = true;

            invalidAmount ++;

            System.out.println(numberAmount+" numbers were entered with "+invalidAmount+" invalid inputs.");

        }


        else if(userInput.hasNextDouble())

        {

            double currentValue = Double.parseDouble(originalInput);

            max = Math.max(max, currentValue);

            min = Math.min(min, currentValue);

            mean = currentValue;

            numberAmount ++;

        }


        else if(originalInput.equals("stop") == false)

        {

            System.out.println("Not a number...");

            invalidAmount ++;

        }

    }



    System.out.println("The maximum is "+max+".");

    System.out.println("The minimum is "+min+".");

    System.out.println("The mean is "+(mean / numberAmount)+".");


    userInput.close();


}

}


例如,我期望输入 7 后的输出为下一行的“输入数字(键入“stop”停止):”(因为程序循环不断提示输入数字),然后用户可以继续输入他们喜欢的数字。相反,实际输出是原始提示用户输入下的空行,用户必须再次输入所需的输入,程序才能开始循环。


蓝山帝景
浏览 68回答 3
3回答

至尊宝的传说

您没有在代码示例中指定userInput是什么,但从使用情况来看,它看起来是 的实例Scanner。如果你有一个Scanner声明然后调用hasNextDouble(),你将得到一个符合你的用法的布尔结果——你将其作为语句中的条件if。Scanner userInput = new Scanner(System.in); boolean b = userInput.hasNextDouble();图片中缺少的是如何hasNextDouble()工作的。查看Scanner 的 Javadoc:如果可以使用 nextDouble() 方法将此扫描器输入中的下一个标记解释为双精度值,则返回 true。扫描仪不会前进超过任何输入。为了回答下一个输入是否是双精度数的真/假,扫描仪必须等待用户的输入才能继续。所有这些都是为了说明:您的代码看起来运行正常。如果您不想等待用户输入,则需要编写代码来反映这一点。

Qyouu

我认为你应该反转代码的逻辑,假设你正在使用扫描仪,尝试这样的事情:import java.util.Scanner;public class Main {    public static void main(String[] args) {        boolean stopped = false;        int numberAmount = 0;        int invalidAmount = 0;        double max = Integer.MIN_VALUE;        double min = Integer.MAX_VALUE;        double mean = 0;        while (stopped == false) {            Scanner userInput = new Scanner(System.in);            System.out.print("Enter a number (type " + "\"" + "stop" + "\"" + " to stop): ");            if (userInput.hasNextDouble()) {                double currentValue = userInput.nextDouble();                max = Math.max(max, currentValue);                min = Math.min(min, currentValue);                mean = currentValue;                numberAmount++;            } else {                String originalInput = userInput.nextLine();                if (originalInput.equals("stop")) {                    stopped = true;                    invalidAmount++;                    System.out.println(numberAmount + " numbers were entered with " + invalidAmount + " invalid inputs.");                } else {                    System.out.println("Not a number...");                    invalidAmount++;                }            }        }        System.out.println("The maximum is " + max + ".");        System.out.println("The minimum is " + min + ".");        System.out.println("The mean is " + (mean / numberAmount) + ".");        // userInput.close();    }}基本上,您首先检查输入类型,然后才从控制台收集值。按照你现在的方式去做,你总是会要求第二个输入。

料青山看我应如是

我不太了解 API,但我希望 hasNextDouble 读取另一行。检查originalInput是否为double,不要读取另一行。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java