【发布时间】:2022-11-28 00:04:57
【问题描述】:
所以我正在制作这个简单的 Java 程序,它可以确定您是否拥有最高荣誉、高级荣誉、荣誉或无荣誉。下面是调试代码:
import java.util.Scanner;
public class StudentInfo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StudentInfo2 a = new StudentInfo2();
System.out.print("Enter First Name: ");
var setFirstname = sc.nextLine();
System.out.print("Enter Last Name: ");
String setLastname = sc.nextLine();
System.out.print("Enter Math Grade: ");
Double setMathgrade = sc.nextDouble();
System.out.print("Enter Science Grade: ");
Double setSciencegrade = sc.nextDouble();
System.out.print("Enter Java Grade: ");
Double setJavagrade = sc.nextDouble();
System.out.print("Enter HTML Grade: ");
Double setHTMLgrade = sc.nextDouble();
Double average = setMathgrade + setSciencegrade + setJavagrade + setHTMLgrade;
System.out.println("Fullname: " + setFirstname + " " + setLastname);
System.out.println("Average grade: " + average / 4);
if ((average >=98) && (average <=100))
{
System.out.print("With Highest Honors");
}
else if ((average >=94) && (average <= 97))
{
System.out.print ("With High Honors");
}
else if ((average >=90) && (average <=93))
{
System.out.print("With Honors");
}
else if (average >89) {
System.out.print("No Honors!");
}
}
}
目标是如果平均成绩高于 98,它将打印“最高荣誉”。 97-94 会打印“High Honors”,93-90 会打印“With Honors”,低于 89 的任何内容都会打印“No honors”。问题是,即使平均成绩高于 89,它仍然会打印“No honors”。
【问题讨论】:
-
请花些时间缩进您的代码——您的 IDE 可能会帮助您自动执行此操作。它会让它很多更容易阅读你的代码。
-
if (average >89)==anything below 89???来吧,先阅读你自己的代码,然后再将其发布到这里 -
提示:当然还有
average > 89不是对应于“低于 89 的任何值”,您似乎忽略了一个事实,即您的平均值是Double,而不是整数。它也根本不是一个平均值——它是只是一笔钱。 (您打印出average / 4,但这不会更改average的值。)例如,如果平均值为 97.5,请考虑您要打印什么,以及您当前的代码如何处理它。 -
简而言之,如果实际平均分超过 25(总分超过 100),您将获得“无荣誉”!
-
然后就是平均 97.5(例如)的问题让你一无所获。 “if”树被过度指定;第二个“如果”(例如)应该只是
if (average >= 94),我们已经知道它小于 98(或大于 100,但编码的 100 的上限检查是其他漏洞)。
标签: java if-statement calculator