录入各科目成绩后如何正确实现4科平均分计算(附Java代码)
Java Swing 平均分计算功能逻辑修复
问题原因
现有jButton4按钮的点击事件逻辑存在两处明显问题:
- 计算逻辑错误:受算术运算符优先级影响,除法
/优先级高于加法+,当前代码仅对最后一门科目的成绩做了除以4的运算,最终得到的是「前三科成绩之和 + 第四科成绩/4」的错误结果,并非四科总分除以4的正确平均分 - 展示逻辑遗漏:现有if判断只覆盖了≥90、78-79、74-75三个极窄的分数区间,其余分数段的计算结果不会被写入平均分展示控件,用户看不到计算结果
原有错误实现代码如下:
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { double grades; grades= Double.parseDouble(comprogGrds .getText())+Double.parseDouble (dsGrds .getText())+ Double.parseDouble (cwGrds.getText())+ Double.parseDouble(multGrds.getText())/4; if(grades>=90){ average.setText(Double.toString(grades)); }else if(grades>=78 && grades<=79){ average.setText(Double.toString(grades)); }else if(grades>=74 && grades <=75){ average.setText(Double.toString(grades)); } }
修复方法
- 用小括号包裹四科成绩的求和逻辑,强制优先计算总分,再执行除以4的平均分运算,从语法层面规避运算符优先级带来的计算错误
- 删除冗余且有遗漏的分数区间判断,只要成绩计算完成就直接写入展示控件,避免出现分数算出来但不显示的问题
- 可选增加输入合法性校验,捕获用户输入非数字内容时抛出的格式转换异常,避免程序直接崩溃
修复后的可运行代码:
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { try { // 优先计算四科总分,再除以4得到正确平均分 double total = Double.parseDouble(comprogGrds.getText()) + Double.parseDouble(dsGrds.getText()) + Double.parseDouble(cwGrds.getText()) + Double.parseDouble(multGrds.getText()); double avg = total / 4; // 直接展示计算得到的平均分 average.setText(String.valueOf(avg)); // 如果需要根据平均分做等级判定,可在此处追加逻辑,不影响平均分展示 } catch (NumberFormatException ex) { average.setText("成绩输入不合法,请输入数字"); } }
写算术表达式时,如果涉及多种运算符混合运算,不需要硬背优先级表,直接用小括号明确标注运算顺序,是出错率最低的写法。
内容的提问来源于stack exchange,提问作者Rose
相关产品推荐
相关产品推荐

