我正在尝试编写一个简单的程序,它将从用户那里获取大量输入并产生最大数量(最大数量)最小数量(最小数量)和平均值。
到目前为止,我编写了代码,但发现第二个和第三个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);
}
答案 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变量。将所有值添加到累加器并计算循环后的平均值。