【发布时间】:2021-01-11 03:18:41
【问题描述】:
与 python 相比,我对 java 还是很陌生,真正使用它大约 5 个月,直到 2 个月前才将它用于 android 开发。我想了解更多关于 java 的知识,特别是因为我基本上只是跳过了 android 开发的东西,并且只学习了我正在从事的任何项目所需的东西。为了帮助我学习,我决定学习用 swing 和一个简单的计算器制作一个 GUI。我在一两个小时内就完成了,不算学习 Swing,对于第一个非 Android Java 程序我很满意
我遇到的问题是,当您输入 2 个数字时,单击一个按钮执行计算,然后更改数字并再次执行,程序仍将使用原始数字,尽管它们不再是那里
当输入中没有数字或缺少数字时它会读取,但不会将新数字用于任何计算。
这是整个程序,很抱歉变量命名不佳和代码通常很糟糕
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class calc implements ActionListener {
private JLabel num1;
private JLabel num2;
private JLabel lans;
private JFrame frame;
private JButton add;
private JButton sub;
private JButton mult;
private JButton div;
private JPanel panel;
private JTextField tnum1;
private JTextField tnum2;
public calc() {
panel = new JPanel();
frame = new JFrame();
frame.setSize(300, 300);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(panel);
panel.setLayout(null);
num1 = new JLabel("1st Number");
num1.setBounds(20, 20, 80, 25);
panel.add(num1);
num2 = new JLabel("2nd Number");
num2.setBounds(20, 50, 80, 25);
panel.add(num2);
tnum1 = new JTextField();
tnum1.setBounds(100, 20, 80, 25);
panel.add(tnum1);
tnum2 = new JTextField();
tnum2.setBounds(100, 50, 80, 25);
panel.add(tnum2);
add = new JButton("+");
add.setBounds(20, 100, 50, 40);
add.addActionListener(this);
panel.add(add);
sub = new JButton("-");
sub.setBounds(80, 100, 50, 40);
sub.addActionListener(this);
panel.add(sub);
mult = new JButton("×");
mult.setBounds(140, 100, 50, 40);
mult.addActionListener(this);
panel.add(mult);
div = new JButton("÷");
div.setBounds(200, 100, 50, 40);
div.addActionListener(this);
panel.add(div);
lans = new JLabel("");
lans.setBounds(120, 150, 150, 25);
panel.add(lans);
frame.setVisible(true);
}
public static void main(String[] args) {
new calc();
}
@Override
public void actionPerformed(ActionEvent e) {
if (!tnum1.getText().isEmpty() && !tnum2.getText().isEmpty()) {
String snum1 = tnum1.getText();
String snum2 = tnum1.getText();
Double fnum1 = Double.valueOf(snum1);
Double fnum2 = Double.valueOf(snum2);
if (e.getSource() == add) {
Double nans = fnum1 + fnum2;
lans.setText(String.valueOf(nans));
} else if (e.getSource() == sub) {
Double nans = fnum1 - fnum2;
lans.setText(String.valueOf(nans));
} else if (e.getSource() == mult) {
Double nans = fnum1 * fnum2;
lans.setText(String.valueOf(nans));
} else if (e.getSource() == div) {
Double nans = fnum1 / fnum2;
lans.setText(String.valueOf(nans));
}
} else if (!tnum1.getText().isEmpty()) {
lans.setText("No number 2");
} else if (!tnum2.getText().isEmpty()) {
lans.setText("No number 1");
} else {
lans.setText("enter 2 numbers");
}
}
}
是的,我知道变量有点令人困惑,但我对命名约定还不是很熟悉,我认为这是一个程序,我只是用来学习一些我并不真正需要的选择的东西使用它们,尤其是因为我不打算将其实际发布到任何地方。
编辑:我瞎了,第一个数字取了两次,而不是两个数字都取了
【问题讨论】:
-
String snum2 = tnum1.getText(); 应该是 String snum2 = tnum2.getText();
标签: java string swing math user-input