Java绩点转换程序问题:如何输出绩点数值而非字母等级
字母成绩转绩点程序修正方案
问题概述
现有Java代码用于将字母成绩(如A、B+等)转换为对应绩点,但存在两处不符合需求的问题:
- 调用
qualityPoint方法后,输出的是输入的字母等级而非方法返回的绩点数值 - 无效输入的异常提示文本错误,需要改为“Invalid grade”
同时原代码存在一个隐藏问题:绩点使用int类型会丢失小数精度(例如A对应的3.75会被截断为3),需要一并修正。
修正后的代码
import java.util.*; public class Lab17 { public static double qualityPoint(String alpha) { if (alpha.equals("A+")) return 4.0; else if (alpha.equals("A")) return 3.75; else if (alpha.equals("B+")) return 3.5; else if (alpha.equals("B")) return 3.0; else if (alpha.equals("C+")) return 2.5; else if (alpha.equals("C")) return 2.0; else if (alpha.equals("D+")) return 1.5; else if (alpha.equals("D")) return 1.0; else if (alpha.equals("F")) return 0.0; else throw new InputMismatchException("Invalid grade"); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Enter a letter grade: "); String alpha = sc.next(); try { double res = qualityPoint(alpha); System.out.println("The quality points: " + res); } catch (InputMismatchException ex) { System.out.println(ex.getMessage()); } sc.close(); } }
修改说明
- 修正绩点精度问题:将
qualityPoint方法的返回类型从int改为double,移除所有强制转换为int的操作,保留正确的小数绩点数值 - 输出正确结果:修改
main方法中的输出语句,将原本输出的字母等级alpha替换为计算得到的绩点res - 修正异常提示:在catch块中直接输出异常携带的自定义信息
ex.getMessage(),确保无效输入时显示“Invalid grade” - 优化代码细节:移除无关的
import javax.lang.model.util.ElementScanner14;语句,添加sc.close()关闭Scanner资源避免泄漏
测试示例
- 输入
A时,输出:The quality points: 3.75 - 输入
x时,输出:Invalid grade
内容的提问来源于stack exchange,提问作者user18316205
相关产品推荐
相关产品推荐

