⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jisuanqi.java

📁 JAVA 实现的一个计算器,是很好的学习教材,仅供新手,老鸟就不要看了
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.LinkedList;
import java.text.NumberFormat;

public class JiSuanQi extends Frame implements ActionListener
{
	NumberButton NumberButton[];                 //数字按钮数组
	OperationButton OperationButton[];           //运算符号数组
	Button 小数点,正负号,退格,倒数,等号,清零;
	Panel panel;                                 //添加按钮的面板
	JTextField resultshow;                       //显示结果的编辑框
	String 运算符号[]={"+","-","*","/","sin","cos","tan","sqrt"};
	LinkedList 存储链表;                         //存储数据的链表
	boolean 按下等号;
	
	
	public JiSuanQi()
	{
		super(" 计算器 ");
		存储链表=new LinkedList();
		NumberButton=new NumberButton[10];       //共有10个按钮(0-9)
		for(int i=0;i<=9;i++)
		{
			NumberButton[i]=new NumberButton(i);
			NumberButton[i].addActionListener(this);
		}
		OperationButton=new OperationButton[8];  //共有8个运算符号,见上面的数组(运算符号[])
		for(int i=0;i<8;i++)
		{
			OperationButton[i]=new OperationButton(运算符号[i]);
			OperationButton[i].addActionListener(this);
		}
		小数点=new Button(".");
		正负号=new Button("+/-");
		等号=new Button("=");
		倒数=new Button("1/x");
		退格=new Button("退格");
		清零=new Button("C");
		
		清零.setForeground(Color.red);
		退格.setForeground(Color.red);
		等号.setForeground(Color.red);
		倒数.setForeground(Color.blue);
		正负号.setForeground(Color.blue);
		小数点.setForeground(Color.blue);
		
		退格.addActionListener(this);
		清零.addActionListener(this);
		等号.addActionListener(this);
		小数点.addActionListener(this);
		正负号.addActionListener(this);
		倒数.addActionListener(this);
		
		resultshow=new JTextField(10);
		resultshow.setHorizontalAlignment(JTextField.RIGHT);
		resultshow.setForeground(Color.blue);
		resultshow.setFont(new Font(" TimesRoman",Font.PLAIN,14));
		resultshow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
		resultshow.setBackground(Color.white);
		resultshow.setEditable(false);
		panel=new Panel();
		panel.setLayout(new GridLayout(4,5));
		
		//面板中的第一行
		panel.add(NumberButton[1]);
		panel.add(NumberButton[2]);
		panel.add(NumberButton[3]);
		panel.add(OperationButton[0]);
		panel.add(OperationButton[4]);
		panel.add(清零);
		//面板中第二行
		panel.add(NumberButton[4]);
		panel.add(NumberButton[5]);
		panel.add(NumberButton[6]);
		panel.add(OperationButton[1]);
		panel.add(OperationButton[5]);
		panel.add(退格);
		//面板中第三行
		panel.add(NumberButton[7]);
		panel.add(NumberButton[8]);
		panel.add(NumberButton[9]);
		panel.add(OperationButton[2]);
		panel.add(OperationButton[6]);
		panel.add(倒数);
		//面板中第四行
		panel.add(NumberButton[0]);
		panel.add(正负号);
		panel.add(小数点);
		panel.add(OperationButton[3]);
		panel.add(OperationButton[7]);
		panel.add(等号);
		
		this.add(panel,BorderLayout.CENTER);
		this.add(resultshow,BorderLayout.NORTH);
		this.addWindowListener(   new WindowAdapter()
		                          {
		                              public void windowClosing(WindowEvent e)
		                  	          {
		                  	              System.exit(0);
		                  	          }
		                          }
		                      );
	    setVisible(true);
	    setBounds(100,50,240,180);
	    setResizable(false);
	    validate();	
	}
	
    public void actionPerformed(ActionEvent e)          
    {
    	if(e.getSource() instanceof NumberButton)
    	//获得鼠标单击数字按钮,鼠标单击数字后,链表节点变为1或3,
    	//当节点为3时,其中节点为2的数据必为运算符号
    	{
    		if(!(resultshow.getText().equals("除数不能为零。")))
    		{
        		NumberButton b=(NumberButton)e.getSource();
    		
        		int number=b.getNumber();              //获取按钮上的数字
        		
        		if(存储链表.size()==0)                 //如果链表中没有节点
        		{
    	    		按下等号=false;
    	    		
    	    		存储链表.add(""+number);           //向链表添加数据,增加一次节点就相对也增一
    	    		resultshow.setText(""+number);
    	    		    	    			    	}
	        	else if((存储链表.size()==1 && 按下等号==false) || 存储链表.size()==3)
	        	{
	        		String num=null;
		        	String s=null;
		    	
	        		if(存储链表.size()==1)
		        	{
		         		num=(String)存储链表.getFirst();
		        	}
		        	else
		        	{
		    	    	num=(String)存储链表.getLast();
		        	}
		     	
		          	if(num.equals("0"))
		        	{
		    	    	s=""+number;
		        	}
		        	else
		          	{
	             		s=num.concat(""+number);
		        	}
		    	
	         		存储链表.set(存储链表.size()-1,s);
		        	resultshow.setText(s);
    	    	}
	        	else if(存储链表.size()==1 && 按下等号==true)
	        	{
	    	    	按下等号=false;
	    	    	
		        	存储链表.removeFirst();
		        	存储链表.add(""+number);
		        	resultshow.setText(""+number);
	        	}
	        	else if(存储链表.size()==2)
	        	{
		        	存储链表.add(""+number);
		        	resultshow.setText(""+number);
	        	}
	    	}
    	}
    	else if(e.getSource() instanceof OperationButton)
    	//获得鼠标单击符号按钮,鼠标单击符号后,链表节点变为1或2,
    	//当节点为2时,其中节点为2的数据必为运算符号而且必是(+ , - , * , /)其中之一
    	{
	    	OperationButton b=(OperationButton)e.getSource();
		
	    	if(存储链表.size()==1 || 存储链表.size()==2)
	    	{
	    		String label=b.getOperator();
			
	    		if(label.equals("sin"))
	    		{
		    		按下等号=true;
		    		double result=Math.sin(Double.parseDouble((String)存储链表.getFirst()));
		    		
		    		存储链表.clear();
		    		存储链表.add(""+result);
		    		resultshow.setText(""+result);
		    	}
		    	else if(label.equals("cos"))
	    		{
		    		按下等号=true;
		    		double result=Math.cos(Double.parseDouble((String)存储链表.getFirst()));
		    		
		    		存储链表.clear();
		    		存储链表.add(""+result);
		     		resultshow.setText(""+result);
		    	}
		    	else if(label.equals("tan"))
		    	{
		    		按下等号=true;
		    		double result=Math.tan(Double.parseDouble((String)存储链表.getFirst()));
		    		
		    		存储链表.clear();
		    		存储链表.add(""+result);
		    		resultshow.setText(""+result);
		    	}
		    	else if(label.equals("sqrt"))
		     	{
		    		按下等号=true;
		    		double result=Math.sqrt(Double.parseDouble((String)存储链表.getFirst()));
			    	
			    	存储链表.clear();
		    		存储链表.add(""+result);
		    		resultshow.setText(""+result);
		    	}
	    		else
	    		{
         			if(存储链表.size()==1)
    	    		{
    	    			存储链表.add(label);
    	    		}
         			else
        			{
    	    			存储链表.set(1,label);
        			}
	    		}
    		}
	    	else if(存储链表.size()==3)
	    	{
	    		String label=b.getOperator();
		    	String num1=(String)存储链表.getFirst();
	    		String num2=(String)存储链表.getLast();
	    		String sign=(String)存储链表.get(1);
			
	    		try
	    		{
	    			double number1=Double.parseDouble(num1);
	       			double number2=Double.parseDouble(num2);
		    		double result=0;
	 							
		    		if(label.equals("sin"))
	    		    {
	        			按下等号=true;
	        			result=Math.sin(number2);
	        			
	        			存储链表.set(2,""+result);
	        			resultshow.setText(""+result);	        			
      	    		}
    	    		else if(label.equals("cos"))
    		    	{
     			      	按下等号=true;
     			      	result=Math.cos(number2);
	    		    	
	    		    	存储链表.set(2,""+result);
	     		    	resultshow.setText(""+result);
	        		}
	    	    	else if(label.equals("tan"))
	    	    	{
		        		按下等号=true;
		        		result=Math.tan(number2);
	    		    	
	    		    	存储链表.set(2,""+result);
		         		resultshow.setText(""+result);
		         	}
	        		else if(label.equals("sqrt"))
	        		{
		        		按下等号=true;
		        		result=Math.sqrt(number2);
	    	    		
	    	    		存储链表.set(2,""+result);
		        		resultshow.setText(""+result);
		        	}
                    else
		     		{
	 		    	    result=result(sign,number1,number2,result);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -