ZBLOG

import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Calculator {   Frame f = new Frame("计算器");   Panel p1 = new   Panel();   Panel p2 = new   Panel();   TextField tf = new TextField(30);

在你提供的代码中,有以下几个问题:

  1. 按钮上的数字和符号与注释不一致。例如,按钮0上应该是数字0而非1。

  2. 除法符号应该为”/“而非”“。

  3. 计算结果可能出现精度问题,建议将计算结果保存为double类型并使用String.valueOf()方法转换为字符串后显示在文本框中。

  4. 运算过程中需要保存第一个数字、运算符和第二个数字,但代码中只定义了num1变量,并且没有用到operator变量。因此,在监听器中添加相应的逻辑来处理这些数据。

以下是修改后的代码:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Calculator {
    Frame f = new Frame("计算器");
    Panel p1 = new Panel();
    Panel p2 = new Panel();
    TextField tf = new TextField(30);
    Button b0 = new Button("0");
    Button b1 = new Button("1");
    Button b2 = new Button("2");
    Button b3 = new Button("/");
    Button b4 = new Button("4");
    Button b5 = new Button("5");
    Button b6 = new Button("6");
    Button b7 = new Button("*");
    Button b8 = new Button("7");
    Button b9 = new Button("8");
    Button b10= new Button("9");
    // 减法按钮
  	Button b11= 
      	newButton("<html><font size='5'>-</font></html>");  
  	// 清零按钮
  	Button b12 = 
      	newButton("<html><font size='5'>C</font></html>");  
  	// 加法按钮
  	Button b13= 
      	newButton("<html><font size='5'>+</font></html>");  
    // 等于号按钮
    Button b14= new Button("=");  
    
    String num1 = "";
    String num2 = "";
    char operator;
    
    A aa = new A();
    
    class A implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            String s = e.getActionCommand();
            if(s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")){ // 输入运算符
                operator = s.charAt(0);
                num1 = tf.getText();
                tf.setText("");
            }else if(s.equals("C")){ // 清零
                tf.setText("");
            }else if(s.equals("=")){ // 计算结果
                num2 = tf.getText();
                double result;
                switch(operator){
                    case '+': result = Double.parseDouble(num1) + Double.parseDouble(num2); break;
                    case '-': result = Double.parseDouble(num1) - Double.parseDouble(num2); break;
                    case '*': result = Double.parseDouble(num1) * Double.parseDouble(num2); break;
                    case '/': result = Double.parseDouble(num1) / Double.parseDouble(num2); break;
                    default: result = 0; break;
                }
                
                // 显示结果
                tf.setText(String.valueOf(result));
            }else{ // 输入数字
                tf.setText(tf.getText() + s);
            }
        }
        
    }
    
    void init(){
        p1.add(tf);
        p2.setLayout(new GridLayout(4,4,5,5));
        p2.add(b7);
        p2.add(b8);
        p2.add(b9);
        p2.add(b11); // 减法按钮
        p2.add(b4);
        p2.add(b5);
        p2.add(b6);
        p2.add(b7);  // 乘法按钮
        p2.add(b1);
        p2.add(b2);
        p2.add(b3);  // 除法按钮
      	p2.add(bc);  // 清零按钮
      	p2.add(b0);
      	p2.add(beq); // 等于号按钮
      	p2.add(bp);  // 加法按钮

        b0.addActionListener(aa);
        b1.addActionListener(aa);
        b2.addActionListener(aa);
        b3.addActionListener(aa);
        b4.addActionListener(aa);
        b5.addActionListener(aa);
        b6.addActionListener(aa);
        b7.addActionListener(aa);
        b8.addActionListener(aa);
        b9.addActionListener(aa);   
    	b11.addActionListenersaa();  	// 减法按钮添加监听器 
    	bc.addActionListenersaa();   	// 清零按钮添加监听器
    	beq.addActionListenersaa();  	// 等于号按钮添加监听器 
    	bp.addActionListenersaa();   	// 加法按钮添加监听器

     	f.add(p1,BorderLayout.NORTH);  
     	f.pack();
     	f.setVisible(true);

   }

   public static void main(String[] args) {
    new Calculator().init();
   }
}

在此基础上,还可以进一步美化界面和优化代码。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=993

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?