gpt4 book ai didi

Java 计算器运算符错误

转载 作者:行者123 更新时间:2023-12-01 07:55:09 26 4
gpt4 key购买 nike

我用 Java swing 库构建了一个计算器。除了 actionEvent 循环中的乘法和除法运算符之外,其他所有操作都有效。所有其他运算符(operator)都可以正常工作。

这是发生错误的地方:我已经在这部分代码上尝试了 try 语句

计算器:

enter image description here

计算器乘法错误:

  1. 首先输入号码

  2. 然后您按下应该清除文本字段的运算符 - 此步骤发生错误

  3. 然后输入第二个数字

  4. 然后按=按钮输出答案

Enter Number enter image description here enter image description here enter image description here

错误图片:

if(e.equals("*"))
{
fnum = txt.getText();
logic.setTotal(fnum);
op = "*";
txt.setText(""); // error occurs here, textfield isn't cleared
JOptionPane.showMessageDialog(null, fnum); //messagebox to see if fnum contains the string from the textfield
}
if(e.equals("/"))
{
fnum = txt.getText();
op = "/";
txt.setText("");
}

Action 事件循环/函数:

public void actionPerformed(ActionEvent ea)
{
else if(op.equals("*"))
{
logic.setTotal(fnum);
logic.multiplication(snum);
total1 = logic.total;
}
else if(op.equals("/"))
{
logic.setTotal(fnum);
logic.divide(snum);
total1 = logic.total;
}
txt.setText(""+total1);
}

逻辑是内部类

内部类:

public class Inner extends Calculators{
public double total;
public Inner()
{
total = 0;
}
public void setTotal(String n)
{
total = convertToNumber(n);
}
public void divide(String n)
{
total /= convertToNumber(n);
}
public void multiplication(String n)
{
total *=convertToNumber(n);
}
}

如果您感到困惑,请索取更多代码,因为我无法包含所有代码。

Code if you want to try it out yourself

最佳答案

您首先要像这样创建按钮:

    ...
JButton plus = new JButton("+");
JButton multiplication = new JButton("*");
JButton divide = new JButton("/");
JButton minus = new JButton("-");
...

然后添加 this作为 Action 监听器。但缺少一些行:

    ...
plus.addActionListener(this);
// missing: multiplication.addActionListener(this);
// missing: divide.addActionListener(this);
minus.addActionListener(this);
...

我是如何发现这个错误的:

  1. 下载代码、编译等
  2. 运行代码,尝试加法、乘法等(检查应用程序的行为)。这是一种黑盒测试
  3. 通过分析代码寻找加法和乘法之间的差异。这与白盒测试有关。
  4. 我看到了,JOptionPane.showMessageDialog(null, fnum);应该被调用 - 但尚未被调用。所以我设置了一个断点(在 Eclipse 中)进行调试
  5. 当我意识到 actionPerformed我还没有调用方法,我搜索了注册 ActionListener 的代码行。

除此之外:我强烈建议重构您的代码。您可以从重新思考代码结构中受益。您将获得更好的可读性,代码将更易于维护,新功能可以更快地实现。

我建议:

  • 降低字段的可见性。让您的字段private ,以便您可以轻松找到对它们的所有引用。
  • 避免重复(称为“不要重复自己”技巧)。例如:而不是调用 addActionListener为每个按钮创建一组按钮(即 ArrayList<JButton> 并使用 for 循环为每个按钮调用 addActionListener
  • 还可以通过定义更多但更短的方法来避免重复的代码片段
  • 考虑删除您的类(class) Calculators并将该代码直接放入 Inner 的方法中.
  • Inner 找到一个更有意义的名称。也许IntermediateResult或类似内容。
  • 创建单独的 ActionListener每个按钮的实例。这会消耗一点性能(人类不会注意到),但会避免长 if -链
  • 代码审查(StackExchange 网络中)上发布您的代码,以获得更多帮助和新想法

关于Java 计算器运算符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31328432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com