c语言case控制小数点,switch语句;小数精度

正如其他人指出的那样,一个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;

}

}

在Grade的forPoints()方法可以让你查找与考试点相对应的等级。

现在,为了跟踪成绩的数量,您可以使用EnumMap而不是个别的计数器变量。请注意,由于查找被编码到enum,你不再需要switch-case:

Map 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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值