为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蓝山帝景 2023-10-12 14:43:14
我在代码中使用 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”停止):”(因为程序循环不断提示输入数字),然后用户可以继续输入他们喜欢的数字。相反,实际输出是原始提示用户输入下的空行,用户必须再次输入所需的输入,程序才能开始循环。
查看完整描述

3 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

您没有在代码示例中指定userInput是什么,但从使用情况来看,它看起来是 的实例Scanner。如果你有一个Scanner声明然后调用hasNextDouble(),你将得到一个符合你的用法的布尔结果——你将其作为语句中的条件if

Scanner userInput = new Scanner(System.in);
boolean b = userInput.hasNextDouble();

图片中缺少的是如何hasNextDouble()工作的。查看Scanner 的 Javadoc:

如果可以使用 nextDouble() 方法将此扫描器输入中的下一个标记解释为双精度值,则返回 true。扫描仪不会前进超过任何输入。

为了回答下一个输入是否是双精度数的真/假,扫描仪必须等待用户的输入才能继续。

所有这些都是为了说明:您的代码看起来运行正常。如果您不想等待用户输入,则需要编写代码来反映这一点。


查看完整回答
反对 回复 2023-10-12
?
Qyouu

TA贡献1786条经验 获得超11个赞

我认为你应该反转代码的逻辑,假设你正在使用扫描仪,尝试这样的事情:


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();

    }

}

基本上,您首先检查输入类型,然后才从控制台收集值。按照你现在的方式去做,你总是会要求第二个输入。


查看完整回答
反对 回复 2023-10-12
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

我不太了解 API,但我希望 hasNextDouble 读取另一行。检查originalInput是否为double,不要读取另一行。



查看完整回答
反对 回复 2023-10-12
  • 3 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信