AWT计算器中使用Choice组件动态选择运算符的完整实现方法

本文介绍如何在java awt计算器中通过choice下拉控件获取用户选定的运算符,并在“计算”按钮点击时将其应用于两个输入数值的运算,避免硬编码操作符,提升代码可维护性与交互灵活性。

在基于AWT开发的简易计算器中,Choice 组件常用于提供加(+)、减(−)、乘(×)、除(÷)等运算符的单选界面。关键在于:不能将运算符作为字符串直接拼入表达式(如 n1 + "+ " + n2),而应根据用户选择的索引或文本,分支执行对应算术逻辑。

以下是一个完整、健壮的实现方案:

1. 初始化Choice并添加选项

Choice choice = new Choice();
choice.add("+");   // 索引 0
choice.add("−");   // 索引 1
choice.add("×");   // 索引 2
choice.add("÷");   // 索引 3
add(choice); // 添加到窗口

2. 在按钮事件处理中解析并运算

public void actionPerformed(ActionEvent e) {
 

if (e.getSource() == b1) { // Calculate 按钮 try { double n1 = Double.parseDouble(t1.getText().trim()); double n2 = Double.parseDouble(t2.getText().trim()); double result = 0.0; String operator = choice.getSelectedItem(); // 推荐:语义更清晰 switch (operator) { case "+": result = n1 + n2; break; case "−": result = n1 - n2; break; case "×": result = n1 * n2; break; case "÷": if (n2 != 0) { result = n1 / n2; } else { t3.setText("Error: Div by zero"); return; } break; default: t3.setText("Error: Invalid operator"); return; } t3.setText(String.format("%.6g", result)); // 自动去除无意义尾随零 } catch (NumberFormatException ex) { t3.setText("Error: Invalid number"); } } }

推荐使用 getSelectedItem() 而非 getSelectedIndex()

  • 更具可读性与可维护性(修改选项顺序不影响逻辑);
  • 避免因索引偏移导致的隐式错误;
  • 支持国际化扩展(如后续替换为中文“加”“减”亦无需改逻辑)。

⚠️ 注意事项

  • 务必对 Double.parseDouble() 做异常捕获,防止空输入或非法字符崩溃;
  • 除法前必须校验除数是否为零;
  • Choice 是重量级AWT组件,若需现代UI建议迁移到Swing(JComboBox)或JavaFX;
  • String.valueOf(double) 可能输出科学计数法(如 1.0E8),使用 String.format("%.6g", result) 可获得更友好的显示效果。

通过以上方式,即可实现用户从下拉菜单选择运算符、点击按钮实时计算的完整交互流程——简洁、安全、易于扩展。