import java.util.*;
public class Lab5_2{
public static void main(String[]args){
Scanner scan = new Scanner(System.in);
int num=0;
boolean choice=true;
int min= Math.min(100, num);// need to fix the min to the avg, won't print out
int max= Math.max(0, num);
int sum=+ num;
double avg= sum/(num+1);
while(choice==true){
if(num>=0 && num<=100){
System.out.println("Please enter a number between 0 and 100 ");
num= scan.nextInt();
System.out.println("You entered: " + num);
}else if(num<0 || num>100){
choice=false;
System.out.println("Thank you ");
}
}
}
/*
System.out.println("Min = " + min);
System.out.println("Max = " + max);
System.out.println("Sum = " + sum);
System.out.println("Avg = " + avg);*/
}
我知道这比看起来容易得多,但我不能为我的生活弄清楚如何让我的代码来计算min,max,sum和avg。我需要它,以便我可以输入任意数量的任何数字,并且不使用数组计算它们(因为我的课程没有到达那里)。
提前谢谢
答案 0 :(得分:3)
首先,您应该在while循环之外使用Scanner.read,因为您不希望处理不在您范围内的数字:
while (choice) {
System.out.println("Please enter a number between 0 and 100 ");
num = scan.nextInt();
if (num >= 0 && num <= 100) {
// accept number and update min, max, sum
} else {
choice = false;
}
}
现在,让我们计算一下我们之后的那些值:
计算sum
很简单:最初,我们的总和为0
,并且每个接受的数字都会累积。因此,要计算总和,我们只需添加num
,即sum = sum + num
。
最小值始终至少与上一次迭代的最小值一样大。我们不需要知道任何其他迭代的值,因此不需要存储它们的数组(或其他集合)。我们只检查num
是否小于先前的最小值,如果为真,则替换最小值,即if (num < min) min = num;
。还有一个简写符号:min = num < min ? num : min;
计算最大值与计算最小值(只是反向)相同。我确定你能找到解决方案。
每次迭代都无法更新平均值。但我们可以在最后计算它。平均值是多少?它是总和除以加数的数量。因此,您需要计算读取数字的次数。您可以通过存储在每次迭代中递增的其他变量来完成此操作。
有了这些信息,您应该能够编写代码。请注意,在进入循环之前正确初始化变量至关重要。仔细想想。此外,还有一个需要考虑的角落情况:如果用户没有输入单个数字,会发生什么?在这种情况下,你的价值观应该是什么?不要忘记,除零是不明确的!