求各位大神指导,用Java编了一个计算器但是清除键无法使用,退格键无法完全清除,会剩下一个数字。求帮改代码!!!

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

import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;

public class MyFrame extends JFrame implements ActionListener {	
	private static final long serialVersionUID = 1L;		
	JPanel contentPane,buttonPane;
	JTextField display;
	String s[]={"CE","AC","%","+","-",
			"6","7","8","9","*",
			"2","3","4","5","/",
			"1","0","00",".","="};
	JButton bt[] = new JButton[20]; 
	double num[]={0, 0};                    //定义两个变量用于存储数值        
	int index=0; 
	char sign;
	MyFrame(){
		this.setSize(400,300);
		this.setLocationRelativeTo(null);
		this.setTitle("计算器");
		this.setResizable(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		contentPane=(JPanel) this.getContentPane();
		display=new JTextField();
		display.setPreferredSize(new Dimension(this.getWidth(),35));
		display.setEditable(false);
		display.setText(""); 
		display.setHorizontalAlignment(JTextField.RIGHT);  
		display.setBorder(new LineBorder(Color.magenta,2));		
		contentPane.add(display,BorderLayout.NORTH);
		buttonPane=new JPanel();
		GridLayout layout=new GridLayout(0,5,3,3);
		buttonPane.setLayout(layout);
		buttonPane.setBorder(new EmptyBorder(10,10,10,10));
		buttonPane.setBackground(Color.blue);
		contentPane.add(buttonPane,BorderLayout.CENTER);		
		for(int i=0; i<20; i++){                       
			bt[i] = new JButton(s[i]); 
			buttonPane.add(bt[i]);
			bt[i].setSize(80, 40);
			bt[i].addActionListener(this); 	
		}
		this.setVisible(true);			
	}

	public static void main(String[] args) {	
		new MyFrame();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO 自动生成的方法存根
		Object t = e.getSource();
		String str = display.getText();
		if(t==bt[1] && str.length()>0) 
			str=str.substring(0, str.length()-1);
		if(t==bt[0]){
			str=""; index=0; num[0]=0; num[1]=0;
			}     
		if(t==bt[5])
			str+='6';                      
		if(t==bt[6])
			str+='7';              
		if(t==bt[7])
			str+='8';                
		if(t==bt[8])
			str+='9';
		if(t==bt[10])
			str+='2';
		if(t==bt[11])
			str+='3';                
		if(t==bt[12])
			str+='4';                   
		if(t==bt[13])
			str+='5';                    
	    if(t==bt[15])
	    	str+='1'; 
	    if(t==bt[16])
	    	str+='0';
	    if(t==bt[17]) {
	    	str+='0';
	    	str+='0';
	    }
	    if(t==bt[18]) 
	    	if(str.indexOf('.') == -1)
	    		str+='.';      //有一个小数点时不再添加    
	    if(index==0) 
	    	num[0] = Double.parseDouble(str);                  //将输入的字符串转化成数值并存储在num中         
	    else
	    	num[1] = Double.parseDouble(str);              
	    if(t==bt[2] || t==bt[3] || t==bt[4] || t==bt[9] || t==bt[14]){            
			if(t==bt[2]) sign='%';                        
			if(t==bt[3]) sign='+';                  
			if(t==bt[4]) sign='-';                        
			if(t==bt[9]) sign='*';              
			if(t==bt[14]) sign='/';                        
			index=1;                        
			str="";               
			}    
		if(t==bt[19]){
			if(sign=='/')num[0]/=num[1]; 
			if(sign=='*')num[0]*=num[1];                     
			if(sign=='%')num[0]%=num[1];                        
			if(sign=='-')num[0]-=num[1];                           
			if(sign=='+')num[0]+=num[1];                              
			index=0;                      
			num[1]=0;                       //清除num[1]中的数值                           
			str=Double.toString(num[index]);                                 
			}   
		display.setText(str); 
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值