我不确定如何创建使用小数精度的switch语句,因为switch语句与双日期类型不兼容。
double grade = input.nextDouble(); //read grade
while (grade !=-1)
{
total += grade; // add grade total
++gradeCounter; // increment number of grades
// increment appropriate letter-grade counter
switch (grade / 1)
{
case 92.5: // grade was between 90
case 100: // and 100, inclusive
++aCount;
break; // exits Switch
是我遇到问题的代码的具体部分,但我不确定我更改了什么。
它是Java语言,如果需要那些信息,我正在使用Netbeans IDE。
答案 0 :(得分:0)
您可以转换为int,但先进行乘法运算,不要丢失小数点。
double grade = 92.5;
int convertedGrade = (int) (grade * 10);
switch(convertedGrade) {
case 925: System.out.println("Grade is 92.5");
break;
答案 1 :(得分:0)
正如其他人所指出的,switch-case
语句旨在与离散/可枚举值一起使用,这使得它与double
数据类型不兼容。如果我理解了这个想法,并且您希望您的程序能够很好地将考试成绩转换为成绩,那么您可以使用enum
来定义每个年级的最低分数:
enum Grade {
A(92.5), B(82.5), C(72.5), D(62.5), E(52.5), F(0.0);
private static final Grade[] GRADES = values();
private double minPoints;
Grade(double minPoints) {
this.minPoints = minPoints;
}
public static Grade forPoints(double points) {
for (Grade g : GRADES) {
if (points >= g.minPoints) {
return g;
}
}
return F;
}
}
forPoints()
中的Grade
方法可让您查找与考试点相对应的成绩。
现在,为了跟踪成绩的数量,您可以使用EnumMap<Grade, Integer>
而不是单个计数器变量。请注意,由于查找已编码到enum
,因此您不再需要switch-case
:
Map<Grade, Integer> gradeCounters = new EnumMap<>(Grade.class);
// initialize the counters
for(Grade g : Grade.values()) {
gradeCounters.put(g, 0);
}
Scanner input = new Scanner(System.in);
double total = 0;
int gradeCounter = 0;
double points = input.nextDouble(); //read exam points
while (points >= 0) {
total += points; // add points to total
++gradeCounter; // increment number of grades
// increment appropriate letter-grade counter
Grade g = Grade.forPoints(points);
int currentCount = gradeCounters.get(g);
gradeCounters.put(g, currentCount + 1);
points = input.nextDouble();
}