我有一个关于如何打破循环以便不包含值的问题。我应该输入几个整数来表示测试中的成绩,然后在输入值“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 :(得分:1)
你没有考虑到你用零初始化min所以:
if(grade<min)
{
min=grade;
}
永远不会改变min
,因为它已经是最小的非负整数 - 零。
因此,请考虑以下条件:
if(min == 0 || min < grade)
{
min=grade;
}
答案 1 :(得分:0)
您的程序正在打印的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)
。
答案 2 :(得分:0)
在处理0
之前,您似乎已经离开了循环。您的最小值为0的原因是因为您将其初始化为0,因此任何正if (grade<min) { min=grade; }
都不会发生grade
。
您有几个选择:
min = max = grade
。min
初始化为大数,任何合理等级都会低于,例如Integer.MAX_VALUE
。 您有一些实现第一个选项的可能性。您可以存储一些初始化为true的first
标志,然后设置为false。您可以保持计数输入的数量,并在计数为0时初始化最小值/最大值(或者取决于您的操作方式为1)。您可以将min / max初始化为某个等级永远不会出现的特殊标志值,例如: -1,并在它们等于该标志值时直接将它们设置为grade
。
这里的要点是你看到0的最小值并不是因为你正在处理最后的0,这是因为你将你的最小值初始化为0,并且没有等级低于此。
答案 3 :(得分:0)
你可能想要这样的东西:
import java.util.Scanner;
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 grade = myScan.nextInt();
int sum = 0;
int count = 0;
int max = grade;
int min = grade;
double avg = grade;
while (grade != 0) {
if (grade > max) {
max = grade;
}
if (grade < min) {
min = grade;
}
count++;
sum += grade;
avg = (sum) / (count);
System.out.println(input);
grade = myScan.nextInt();
}
System.out.println("Maximum:" + max);
System.out.println("Minimum:" + min);
System.out.println("Average:" + avg);
}
}
宣泄:
Input numerical grade:
89
Input numerical grade:
47
Input numerical grade:
78
Input numerical grade:
0
Maximum:89
Minimum:47
Average:71.0