我有一个问题,关于如何跳出循环以免包含值。我应该输入一些整数来表示测试的等级,然后在输入值“ 0”时退出循环。但是,我不希望在平均值和最小值的计算中包含0。这有点含糊,所以这是我的代码。
import java.util.*;
import java.lang.*;
public class Grades
{
public static void main (String[] args)
{
Scanner myScan= new Scanner(System.in);
String input="Input numerical grade:";
System.out.println(input);
int sum=0;
int count= 0;
int max= 0;
int min= 0;
double avg=0;
boolean notNull= true;
while(notNull== true)//While grades are greater than 0 ask the question again
{
int grade= myScan.nextInt();
if(grade==0)break;
if(grade>max)
{
max=grade;
}
if(grade<min)
{
min=grade;
}
System.out.println(input);
sum +=grade;
count++;
avg= (sum)/(count);
}
System.out.println("Maximum:"+max);
System.out.println("Minimum:"+min);
System.out.println("Average:"+avg);
}
}
这是我输入一些随机考试成绩和0时的回报。因此,我希望我的最小值不为47,而不是0。
----jGRASP exec: java Grades
Input numerical grade:
89
Input numerical grade:
47
Input numerical grade:
78
Input numerical grade:
0
Maximum:89
Minimum:0
Average:71.0
----jGRASP: operation complete.
最佳答案
您的程序正在打印的0
不是用户输入的0
。这是将0
初始化为的min
。 (当前,您的average
正在正确计算。)
if(grade<min)
{
min=grade;
}
min
的原始值为0
。因此,除非您的分数为负,否则grade<min
永远不会评估为true
。代替
int min = 0;
,您应该这样做:int min = Integer.MAX_VALUE;
另外,正如我所评论的那样,因为您永远不会触摸用作
boolean
条件检查的while loop
,并且只希望在用户输入0
时退出循环,所以您只需删除整个变量,然后使用while(true)
。