Java “如何更改结果”;0“;在计算器上?
我是Java新手,我正在尝试制作一个计算器,但是我对结果有一个问题。它总是“0”。我使用eclipse和Swing。我的代码如下:Java “如何更改结果”;0“;在计算器上?,java,eclipse,swing,calculator,Java,Eclipse,Swing,Calculator,我是Java新手,我正在尝试制作一个计算器,但是我对结果有一个问题。它总是“0”。我使用eclipse和Swing。我的代码如下: package calculator1; import java.awt.BorderLayout; public class MainForm extends JFrame { private JPanel contentPane; private JTextField textResult; /** * Launch the application.
package calculator1;
import java.awt.BorderLayout;
public class MainForm extends JFrame {
private JPanel contentPane;
private JTextField textResult;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainForm frame = new MainForm();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
double number1=0;
double number2=0;
String islem="";
/**
* Create the frame.
*/
public MainForm() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 509, 534);
contentPane = new JPanel();
contentPane.setBackground(Color.BLACK);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
textResult = new JTextField();
textResult.setEditable(false);
textResult.setBounds(5, 5, 486, 42);
textResult.setColumns(10);
JButton btn1 = new JButton("1");
btn1.setBounds(45, 105, 80, 80);
btn1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(islem.equals(""));
textResult.setText("");
textResult.setText(textResult.getText()+"1");
}
});
JButton btn4 = new JButton("4");
btn4.setBounds(45, 185, 80, 80);
btn4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(islem.equals(""));
textResult.setText("");
textResult.setText(textResult.getText()+"4");
}
});
JButton btn7 = new JButton("7");
btn7.setBounds(45, 265, 80, 80);
btn7.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(islem.equals(""));
textResult.setText("");
textResult.setText(textResult.getText()+"7");
}
});
JButton btn5 = new JButton("5");
btn5.setBounds(125, 185, 80, 80);
btn5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(islem.equals(""));
textResult.setText("");
textResult.setText(textResult.getText()+"5");
}
});
JButton btn8 = new JButton("8");
btn8.setBounds(125, 265, 80, 80);
btn8.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(islem.equals(""));
textResult.setText("");
textResult.setText(textResult.getText()+"8");
}
});
JButton btn2 = new JButton("2");
btn2.setBounds(125, 105, 80, 80);
btn2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(islem.equals(""));
textResult.setText("");
textResult.setText(textResult.getText()+"2");
}
});
JButton btn3 = new JButton("3");
btn3.setBounds(205, 105, 80, 80);
btn3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(islem.equals(""));
textResult.setText("");
textResult.setText(textResult.getText()+"3");
}
});
JButton btn6 = new JButton("6");
btn6.setBounds(205, 185, 80, 80);
btn6.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(islem.equals(""));
textResult.setText("");
textResult.setText(textResult.getText()+"6");
}
});
JButton btn9 = new JButton("9");
btn9.setForeground(Color.BLACK);
btn9.setBounds(205, 265, 80, 80);
btn9.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(islem.equals(""));
textResult.setText("");
textResult.setText(textResult.getText()+"9");
}
});
JButton btn0 = new JButton("0");
btn0.setBounds(125, 345, 80, 80);
btn0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(islem.equals(""));
textResult.setText("");
textResult.setText(textResult.getText()+"0");
}
});
JButton btncarp = new JButton("*");
btncarp.setFont(new Font("Tahoma", Font.PLAIN, 35));
btncarp.setBounds(382, 60, 80, 80);
btn0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
islem="*";
number1=Double.parseDouble(textResult.getText());
}
});
JButton btnarti = new JButton("+");
btnarti.setFont(new Font("Tahoma", Font.PLAIN, 35));
btnarti.setBounds(285, 265, 80, 80);
btn0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
islem="+";
number1=Double.parseDouble(textResult.getText());
}
});
JButton btneksi = new JButton("-");
btneksi.setFont(new Font("Tahoma", Font.PLAIN, 35));
btneksi.setBounds(285, 105, 80, 80);
btn0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
islem="-";
number1=Double.parseDouble(textResult.getText());
}
});
JButton btnbolu = new JButton("/");
btnbolu.setFont(new Font("Tahoma", Font.PLAIN, 35));
btnbolu.setBounds(285, 185, 80, 80);
btn0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
islem="/";
number1=Double.parseDouble(textResult.getText());
}
});
JButton btnesittir = new JButton("=");
btnesittir.setForeground(new Color(255, 153, 255));
btnesittir.setFont(new Font("Tahoma", Font.PLAIN, 35));
btnesittir.setBounds(285, 345, 80, 80);
btnesittir.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
number1=Double.parseDouble(textResult.getText());
number2=Double.parseDouble(textResult.getText());
**double result=0;**
switch (islem) {
case "*":
result=number1*number2;
break;
case "/":
result=number1/number2;
break;
case "+":
result=number1+number2;
break;
case "-":
result=number1-number2;
break;
default:
break;
} //end switch
**textResult.setText(String.valueOf(result));**
islem="";
}
});
contentPane.setLayout(null);
contentPane.add(textResult);
contentPane.add(btn1);
contentPane.add(btn4);
contentPane.add(btn7);
contentPane.add(btn5);
contentPane.add(btn8);
contentPane.add(btn2);
contentPane.add(btn3);
contentPane.add(btn6);
contentPane.add(btn9);
contentPane.add(btn0);
contentPane.add(btncarp);
contentPane.add(btnesittir);
contentPane.add(btnarti);
contentPane.add(btneksi);
contentPane.add(btnbolu);
}
}
我可以写什么来代替“double result=0;”
或者我需要换点别的
我只是想指出代码中存在的问题
我相信还有其他更好的方法来解决计算机问题
代码更少,更简洁
首先主要问题,您的变量命名非常糟糕
例如,您将*
按钮命名为btncarp
,这对任何阅读您代码的人都没有意义
第二个问题,您将操作侦听器添加到*
操作中的按钮0
,/
和-
操作中
像
解释:您将读取number1
值,清除结果框,并准备好读取操作方法中的第二个值
Fourth:您可以在=
Operation Action Listener部分中读取第二个号码,即number2
,无需在该位置读取number1
像
请为变量选择合理的名称
注意:除了我指出的问题,您的代码几乎没有问题,您在错误的位置读取了
number1
和number2
变量您似乎有一些严重的逻辑问题,请看一下
number1 = Double.parseDouble(textResult.getText());
number2 = Double.parseDouble(textResult.getText());
这两个数字会有什么不同呢?您从同一个来源获取了值(textResult
)
每次用户按数字键时,您都将islem
设置为”
,因此如果用户按1+2,islem
现在是”
现在的问题是,如何修复它
您需要更改逻辑,而不是等到用户按下=按钮,您可以在输入值时执行每个计算
这意味着您需要某种方法来维护运行结果并执行所需的计算
例如
protected void performOperation(double value) {
switch (islem) {
case "*":
result *= value;
break;
case "/":
result /= value;
break;
case "+":
result += value;
break;
case "-":
result -= value;
break;
default:
result = value;
} //end switch
islem = "";
textResult.setText(String.valueOf(result));
}
JButton btn1 = new JButton("1");
btn1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
performOperation(1);
}
});
这样做的目的是获取要计算的值,确定需要执行的计算(如果有),更新textResult
字段,并保留计算修改器
您可能需要更改所有数字按钮以使用适当的值调用此方法,例如
protected void performOperation(double value) {
switch (islem) {
case "*":
result *= value;
break;
case "/":
result /= value;
break;
case "+":
result += value;
break;
case "-":
result -= value;
break;
default:
result = value;
} //end switch
islem = "";
textResult.setText(String.valueOf(result));
}
JButton btn1 = new JButton("1");
btn1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
performOperation(1);
}
});
现在,在您的原始代码中,所有修改器按钮都没有做任何操作…这是因为您一直将这些操作注册到btn0
,所以您需要修复这些操作
JButton btneksi = new JButton("-");
//...
btn0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
islem="-";
number1=Double.parseDouble(textResult.getText());
}
});
他们现在应该设置他们需要使用的计算修改器
JButton btncarp = new JButton("*");
//...
btncarp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
islem = "*";
}
});
这将解决您似乎遇到的核心问题
您还可以查看更多详细信息您希望实现什么目标?为什么
double result=0代码>问题?我不明白为什么要更改double result=0代码>由其他东西生成。结果变量在之后更改,因此它不会停留在0
。如果它没有改变,说明代码中的其他地方有问题。避免使用null
布局,像素完美的布局在现代ui设计中是一种错觉。影响零部件单个尺寸的因素太多,您无法控制。Swing的设计初衷是与布局经理一起工作,抛弃它们将导致无止境的问题,您将花费越来越多的时间试图纠正这些问题,并等待您的答案。如果double result=0,我不知道还有什么问题;没关系。我要看情况,它做了你想做的事情吗……我相信你让整个事情对OP来说有点混乱。OP太新手了,无法选择正确的变量名称。:)我不认为改变op代码的逻辑对我的op也没有帮助:)@KickButtowski好吧,op的核心计算方法被打破了,我本可以添加一个列表
或两个,但考虑得更好……我不认为op的主要问题是读取错误位置的number1和number2变量。你改变了操作代码的整个逻辑,我相信操作最终会带来巨大的混乱。请看我的答案。:)你我一直很佩服你,但有时把我们自己的级别提高到新手级别是很好的,这样会更有帮助:)@KickButtowski所以将核心功能移动到单一方法比必须重复相同的操作10次更令人困惑,这是一种有趣的思维方式…“你从来没有初始化过你的数字1”-实际上操作是这样的,他们只是做了一个垃圾点,所以它总是等于number2
,它在btnesitir
ActionListener
…非常适合它;)更改已初始化为已分配。希望更好,谢谢你。我的计算器现在运行良好,现在我将尝试使它与两个或更多的数字工作。变量命名;我用自己的语言命名了其中一些,因为这对你来说可能很糟糕:)我很抱歉这样发布@İlaydaUnal那么我的回答对你有帮助吗?是的,非常有帮助。再次感谢你。
JButton btncarp = new JButton("*");
//...
btncarp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
islem = "*";
}
});