如何避免Java代码中的Nan输出



我对Java编码还很陌生。我有一个练习,要求根据模块的注册情况计算平均分数。我检查了很多次代码,但找不到错误在哪里。这就是我所做的:

public class Student {
double mark1, mark2, mark3, mark4, mark5, mark6;
boolean regModule1, regModule2, regModule3, regModule4, regModule5, regModule6;
boolean tabModule[] = {regModule1, regModule2, regModule3, regModule4, regModule5, regModule6};
double tabmark[] = {mark1, mark2, mark3, mark4, mark5, mark6};
public void average() {
double sum = 0;
int count = 0;
double av;
for(int i=0; i<=5; i++) {
if(tabModule[i] == true) {
count++;
sum += this.tabmark[i];
}
}
av = sum/count;
System.out.println("the average is: " + av);
}
}

这是主要的代码:

e1.regModule1 = true;
e1.regModule4 = true;
e1.mark1 = 18.5;
e1.mark4 = 13.25;
e1.average();

当我运行该项目时,我收到的是:

平均值为:NaN(不是数字(

我在这里搞什么?

问题是,默认情况下,您的布尔变量已用false初始化,因此if(tabModule[i] == true)始终为false而非true,因此count将为零,并且不允许除法为零,但在这种情况下,Java将整数值提升为双倍,因此在提升为双倍后,您有double sum = 0count = 0.0,因此结果为NaN。

最新更新