【问题标题】:How to close a while loop using user input for doubles如何使用双打的用户输入关闭while循环
【发布时间】:2020-06-18 14:00:30
【问题描述】:

所以,免责声明,这是一个班级,但我已经提交了作业并联系了教授寻求帮助,所以我没有作弊或要求别人做我的作业。在这个过程中,我也花了几个小时浏览这个网站。

我试图让用户输入最多 52 次,将它们加在一起,然后平均总和。

我制作这个方法是为了让用户根据代码中进一步输入的销售变量输入他们的每周利润。我认为 52 的限制会很好,因为它可以让一个人平均 2 周、1 个月、6 个月等,就像他们正在尝试预算或找到估计的年收入一样。

    //new method
    public static void computeAverageSalesProfit() {       

        //new scanner object in method
        Scanner input = new Scanner(System.in);

        //new object
        Sales AvgProfit = new Sales();

        //prompt for input
        System.out.println("Please enter weekly profits, up to 52 weeks.  When finished, enter '-1.'");       

        //value to store input, and test against
        double value = 0;
        //new double array to sum together and average out
        double[] sum2 = new double[52];

        //while loop of doom
        while(value >= 0) {

        for (int i=0; i<sum2.length; i++) {
        value = input.nextDouble();
        sum2[i] = value + 0;

        }
        }

        double WeeklyProfits = 0;
        for (int i=0; i<sum2.length; i++) {
            WeeklyProfits = sum2[i] / sum2.length;
        }

        AvgProfit.setWeeklyProfits(WeeklyProfits);

        System.out.printf("Your average profits are %.2f", AvgProfit.getWeeklyProfits());

    }

这是我晚上结束的代码,我不知道如何结束 while 循环。我最初没有 value 变量,但认为在 sum2 迭代之前检查它可以让我关闭它。当我运行程序时,它接受用户输入,但直到我达到 52 次迭代才结束。我也尝试在布尔表达式中使用“0000”,但这也不起作用。

我也尝试过不设置 value 变量,我尝试了所有我能想到的并且可以在互联网上找到的方法。我尝试了使用和不使用纯双精度(不是数组)的值变量。我什至尝试使用字符串,使用布尔表达式(good = true/false,while (!/good) 等,但我无法将其转换为 double 并取平均值。

我完全困惑了,我的头很痛。我非常感谢您能够分享的任何帮助或见解。谢谢。

哦,我在代码的不同部分有一个 while 循环,它确实有效,但我认为这个循环的工作方式不同。我想我要么想多了,要么只是遗漏了一些非常明显的东西。

//Check Year length separate, keeping original code mostly intact
    public static boolean isValid(String input)
    {
        //Does it have 4 digits?
        if(input.length() != 4)
            return false;

    // Is it a number ?
        try
        {
            Integer i = Integer.parseInt(input);
        }
        catch(NumberFormatException e)
        {
            return false;
        }

        // Passed all checks and is valid
        return true;
    }    

【问题讨论】:

  • 查看您的代码,我认为 while 循环仅在 value 小于 0 时终止。但是,由于您更新值 52 次,因此第 52 次输入变量必须更少大于 0。
  • 我认为您想要的是用户最多可以输入 52 个数字,但不能更多。但是,如果他只想输入 42 个数字,他必须明确通知程序,他已经完成输入数字。这可以通过不同的方式完成 - 读取“退出”行或“”空行(又名“输入”)。但是,您必须在代码中实现这一点。
  • 我错过了你的一些代码,你得到了退出代码(这里是'-1')的东西。那么while循环是不必要的。如果你读到一个错误的值。 '-1',只需拨打break;。这将退出 for 循环。

标签: java while-loop average


【解决方案1】:

您可以做的一件事是使用 for 循环而不是使用 while 循环:

//value to store input, and test against
double value = 0;
//new double array to sum together and average out
double[] sum2 = new double[52];

// repeats 52 times max
for (int i=0; i<sum2.length; i++) {
    value = input.nextDouble();

    // Checking if the user entered a negative number
    if (value < 0) {
        // The break keyword exits a loop
        break;
    }

    sum2[i] = value + 0;
}

【讨论】:

  • 非常感谢!我想多了......我试图使用一个不必要的循环。现在,我有另一个问题要问您...我的 avg(WeeklyProfits,是的,我需要将变量的第一个字母小写)输出 0。它在我的原始代码中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 1970-01-01
  • 2016-07-11
  • 2013-11-16
  • 2020-02-15
  • 1970-01-01
相关资源
最近更新 更多