为什么我的按钮没有执行正确的操作?

Why does my button not perform the proper action?

我使用 GUI 创建了一些 "calculator"。但是当我使用我的输入按钮时,它总是打印出两个数字的乘积,而不管我按下的运算符是什么。

class Calculator extends JFrame implements ActionListener{
   JTextfield firstN, secondN;
   JButton addButton, subButton, divButton, mulButton, enter;
   JLabel result;

   Calculator(){
      // here I initialized all the components and added buttons/ActionListeners
   }

   public void actionPerformed(ActionEvent e) {
      int first = Integer.parseInt(firstN.getText());
      int second = Integer.parseInt(secondN.getText());
      int value = 0;

      if(e.getSource() == addButton){
          value = first + second;
      }else  if(e.getSource() == subButton){
          value = first - second;
      }else if(e.getSource() == divButton){
          value = first/second;
      }else{
          value = first*second;
      }

      if(e.getSource() == enter)
         result.setText(value + "");
      }

没有输入按钮,计算器工作正常。我尝试了一个 do-while 循环,但结果是一个无限循环..

我猜 if/else 语句有问题,但前 4 个语句中的一个总是被执行,所以最后一个语句应该也能正常工作...

这是因为您的 else 子句将在 (e.getSource() == enter) 时被调用,因为 if 和 else if 语句将为假。你可以把它改成这样:

      if(e.getSource() == addButton){
          value = first + second;
      }else  if(e.getSource() == subButton){
          value = first - second;
      }else if(e.getSource() == divButton){
          value = first/second;
      }else if(e.getSource() == mulButton){
          value = first*second;
      }else if(e.getSource() == enter)
         result.setText(value + "");
      }

不应在 actionPerformed 方法中声明 value 变量。这样,每次单击按钮时它都会重置。输入按钮也会重置它。你得到了两个数字的乘积,因为它是第一个 if 语句的默认分支。 if语句应该只有一个,取值应该是class级别字段而不是局部变量:

class Calculator extends JFrame implements ActionListener{
   JTextfield firstN, secondN;
   JButton addButton, subButton, divButton, mulButton, enter;
   JLabel result;
   int value;
   Calculator(){
      // here I initialized all the components and added buttons/ActionListeners
   }

   public void actionPerformed(ActionEvent e) {
      int first = Integer.parseInt(firstN.getText());
      int second = Integer.parseInt(secondN.getText());


      if(e.getSource() == addButton){
          value = first + second;
      }else  if(e.getSource() == subButton){
          value = first - second;
      }else if(e.getSource() == divButton){
          value = first/second;
      }else if (e.getSource() == mulButton){
          value = first*second;
      }else if(e.getSource() == enter)
         result.setText(value + "");
      }
  }

自从最后一个 else 块 { value = first*second; }没有if条件,它不仅会在e.getSource == mulButton时执行,还会在[=21=时执行] == 输入.

解决方案可能是用以下代码替换最后一个 else 语句:

} else if(e.getSource == mulButton) {
    value = first*second;
}