而循环被忽略

时间:2016-04-05 03:45:34

标签: java while-loop

我正在尝试编写一个简单的程序,它将从用户那里获取大量输入并产生最大数量(最大数量)最小数量(最小数量)和平均值。

到目前为止,我编写了代码,但发现第二个和第三个while循环被忽略了。我通过输出println来测试它。我是Java新手,但感谢任何帮助:)

  public void analyseInput() {
    UI.clearText();

    UI.print("input (end with 'done')");           
    double sum = 0;
    double i=0;

    for( i=0; UI.hasNextDouble(); i++){                    //average
        double amt = UI.nextDouble();
        sum = (sum + amt);
    }

    UI.println("test0");

    int maxAge = 0;
    while(UI.hasNextDouble()){                              //max
        int age = UI.nextInt();
        while(age>maxAge){
            maxAge = age; 
            UI.println(maxAge);
        }
    }

    double minAge = 0;
    while(UI.hasNextDouble()){                              //min
        double age = UI.nextDouble();
        if(age<minAge){
            minAge = age;
        }
    }

    double average = sum/i;
    UI.nextLine();                                 // to clear out the input
    UI.println(average);
    UI.println(minAge);

}

3 个答案:

答案 0 :(得分:4)

取出你的for循环。

使用它清空ui.doubles。

此外,您可以在一个循环中进行最大,最小和平均计算,而不是迭代两次堆栈。你的max和finder也不对,因为它只适用于排序列表,如果列表已经排序,你只需查看它的任何一端。

答案 1 :(得分:0)

如果您需要一组数据的最小年龄,最大年龄,平均值,而不是在一堆时间内解析它,您可以一次性完成。

public void analyseInput() {
    UI.clearText();

    UI.print("input (end with 'done')");           
    double sum = 0;
    double i=0;
    double maxAge = Double.MIN_VALUE, minAge = Double.MAX_VALUE;

    for( i=0; UI.hasNextDouble(); i++){                    //average
        double amt = UI.nextDouble();
        sum = (sum + amt);
        maxAge = Math.max(amt, maxAge);
        minAge = Math.min(amt, minAge);
    }

    double average = sum/i;
    UI.nextLine();                                 // to clear out the input
    UI.println(average);
    UI.println(minAge);
}

答案 2 :(得分:-1)

您必须在单个dbmode-selector内执行所有操作(max,min,avg)并向右初始化变量。对于每个新的double值,更新min和max变量。将所有值添加到累加器并计算循环后的平均值。