Java 为什么我的比较函数不适用于最高输入值和最低输入值?

Java 为什么我的比较函数不适用于最高输入值和最低输入值?,java,Java,好了,朋友们,我想弄清楚为什么“-1”(我的退出值)会被比较并成为我的最低分数,为什么“100”不是我的最高分数。我相信这是很简单的原因,但我看不到 示例输入和输出如下所示: 欢迎来到平地机 输入从0到100的等级,或输入负数退出。 一百 输入从0到100的等级,或输入负数退出。 九十 输入从0到100的等级,或输入负数退出。 八十 输入从0到100的等级,或输入负数退出。 七十 输入从0到100的等级,或输入负数退出。 -一, 等级总数:340 职系总数为:4 A的数量:2 B的数量:1 C的

好了,朋友们,我想弄清楚为什么“-1”(我的退出值)会被比较并成为我的最低分数,为什么“100”不是我的最高分数。我相信这是很简单的原因,但我看不到

示例输入和输出如下所示:

欢迎来到平地机

输入从0到100的等级,或输入负数退出。 一百

输入从0到100的等级,或输入负数退出。 九十

输入从0到100的等级,或输入负数退出。 八十

输入从0到100的等级,或输入负数退出。 七十

输入从0到100的等级,或输入负数退出。 -一,

等级总数:340

职系总数为:4

A的数量:2

B的数量:1

C的数量:1

D的数量:0

F的数量:0

最高成绩:90

最低等级:-1

平均成绩:85.0

代码从这里开始

import java.util.Scanner;
公共类Lab7
{
/**
*作者:内特·富勒
*日期:2017年2月9日
*这个程序接受任意数量的等级并执行一些计算
*/
公共静态int等级、总NUMOF等级、总等级、最高等级、最低等级、,
编号A、编号B、编号C、编号D、编号F、,
旧等级,新等级;
公共静态双平均等级;
静态扫描仪kb=新扫描仪(System.in);
公共静态void main(字符串[]args)
{
System.out.println(“欢迎来到分级机ator!”);
System.out.println(“输入从0到100的分数,”+
“或输入一个负数退出。”);
等级总和=0;
等级=kb.nextInt();
而(等级>=0)
{
System.out.println(“输入从0到100的分数,”+
“或输入一个负数退出。”);
determineGrade();
}
打印等级();
}
公共静态void determineGrade()
{
//A
如果(等级>=90&&grade=80&&grade=70&&grade=60&&grade=0&&grade oldGrade)
{
最高等级=新等级;
}

else-if(newGrade只有当newGrade大于等于0时,才应执行整个if-else块。首先添加了一个if条件。这应该可以解决问题

public static void compare()
{
   if(newGrade >=0 ) {
    newGrade = grade;
    if(newGrade > oldGrade)
    {
        highestGrade = newGrade;
    }
    else if(newGrade <= oldGrade)
    {
        lowestGrade = newGrade;
    }
    oldGrade = newGrade;
}
}
publicstaticvoidcompare()
{
如果(新等级>=0){
新等级=等级;
如果(新等级>旧等级)
{
最高等级=新等级;
}

else if(newGrade要使程序工作,请从
increment()
方法中删除行
grade=kb.nextInt();
,并在
determinategrade()
方法中删除最后一个
else

在主方法中,进行以下更改:

grade = 0;
while(grade >= 0)
{
    System.out.println("Enter a grade from 0 to 100, " + 
               "or enter a negative number to quit.");
     grade = kb.nextInt();
     determineGrade();
}
printGrades();  

代码没有相应运行的原因是,在处理输入等级之前,您从用户处获取了新输入,并释放了需要进一步处理的旧值。

请参阅:如何创建一个最小、完整且可验证的示例。
increment()中有一个副作用
这可能是您所有问题的原因。正确,
increment()
会将
grade
设置为一个新值,此新值将在
compare()
中使用,您可能错误地认为您仍在使用旧值。您的最高分数不起作用的原因是您的条件
如果(newGrade>oldGrade)
不正确。
oldGrade
仅代表最后一个等级。要获得最高等级,必须与当前最高等级进行比较,即
if(newGrade>highestGrade)
。虽然这可能会奏效,但通过添加另一个边缘案例,这只会使他的代码更加复杂。最好重构流程,这样就不需要了。是的,但我们不确定他更广泛的用例是什么。此外,他知道代码中的问题在哪里,我相信他现在能够重构它。谢谢!所有这些都奏效了,但我的想法很低est值现在为0!在compare()方法中,删除else if语句,而仅使用if。此外,在最低级声明语句中,将最低级初始化为Integer.MAX_值
grade = 0;
while(grade >= 0)
{
    System.out.println("Enter a grade from 0 to 100, " + 
               "or enter a negative number to quit.");
     grade = kb.nextInt();
     determineGrade();
}
printGrades();