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

📄 calculator.java

📁 自编java计算器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;

public class calculator
{
	public static void main(String[] args)
	 {
	 	calculatorFrame frame=new calculatorFrame();
	 	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	 	frame.show();
	 }
}

class calculatorFrame extends JFrame
{
	public calculatorFrame()
	{
		setTitle("Calculator");
        setSize(Def_width,Def_height);
		Container contentPane=this.getContentPane();
		calPanel panel=new calPanel();
		contentPane.add(panel);
	    
	}
	
	public static final int Def_width=700;
	public static final int Def_height=240;
}


//calculate panel
class calPanel extends JPanel
{
	private int[] display_num=new int[10]; //display list
	private int num_count;                 //number of "number"
	private int if_point;                  //location of point
	private JPanel panel_button;
	private Display panel_display;         
	private double a;
	private double b;
	private int E;
	private int compute;
	private boolean minus;
	private boolean error;
	private boolean num_showing;
	private int state; 
	
	// number button Listener
	class numlistener implements ActionListener
	 {
	 	public void actionPerformed(ActionEvent event)
	 	 { 
	 	   if(state==1)
	 	    {
	 	    	num_count=0;
	 	    	minus=false;
	 	    	if_point=10;
	 	    	state=0;
	 	    	E=0;
	 	    }
	 	   String input=event.getActionCommand();
	 	   String in;
	 	   int q;
	 	   for( q=0;q<10;q++)
	 	    {   
	 	    	in=String.valueOf(q);
	 	    	if(in.equals(input)) break;
	 	    }
	 	   
	 	   if(num_count<10) 
	 	    {
	 	    	if(!(num_count==2 && minus && display_num[1]==0 && if_point!=2))
	 	    	 {
	 	    		
	 	    	  if(!(!minus && if_point!=1 && num_count==1 && display_num[0]==0))	
	 	    		{
	 	    			display_num[num_count]=q;
	 	                num_count++;
	 	                panel_display.repaint();
	 	                num_showing=true;
	 	            }
	 	          else
	 	            {
	 	            	display_num[0]=q;
	 	            	panel_display.repaint();
	 	            	num_showing=true;
	 	            }  
	 	         }
	 	        else
	 	          {
	 	          	display_num[1]=q;
	 	          	panel_display.repaint();
	 	            num_showing=true;
	 	          } 
	 	     }
	 	  }
	 }
	
	//Compute Listener 
	class Compute implements ActionListener
	 {  
	   public void actionPerformed(ActionEvent event)
	 	{
	 	  
	 	  if(state==1)
	 	    { num_count=0;
	 	      E=0;
	 	    }   	
	 	  if(!minus)
	 	    { 
	 	      if(num_count>0)
	 	        {
	 	        	String s="";
	 	        	int i;
	 	        	for( i=0;i<if_point && i<num_count;i++)
	 	        	   s=s+display_num[i];
	 	        	   
	 	        	if(i<num_count) s=s+".";
	 	        	
	 	        	for(;i<num_count;i++)
	 	        	   s=s+display_num[i];   
	 	        	
	 	        	a=Double.parseDouble(s);
	 	            a=a*Math.pow(10,E);
	 	            E=0;    
	 	  	        if_point=10;
	 	  	        num_count=0; 
	 	  	        	  
	 	        }
	 	    }
	 	   else 
	 	    {
	 	  	     if(num_count>1)
	 	        {
	 	        	String s="-";
	 	        	int i;
	 	        	for( i=1;i<if_point && i<num_count;i++)
	 	        	   s=s+display_num[i];
	 	        	   
	 	        	if(i<num_count) s=s+"."; 
	 	        	
	 	        	for(;i<num_count;i++)
	 	        	   s=s+display_num[i];
	 	        	   
	 	        	a=Double.parseDouble(s);    
	 	        	a=a*Math.pow(10,E);
	 	        	E=0;     
	 	  	        if_point=10;
	 	  	     }
	 	   
	 	     }
	 	  String input=event.getActionCommand();
	 	    
	 	  if((num_count>0 && !minus)||(minus && num_count>1)||num_showing)   
	 	  {
	 	  	if(input.equals("+")) compute=1;
	 	  	else if(input.equals("x^y")) compute=5;
	 	    else if(input.equals("*")) compute=3;
	 	    else if(input.equals("/")) compute=4;   
	 	    else if(input.equals("-")) compute=2;
	 	    num_count=0;
	 	    minus=false;
	 	   }
	 	  else if(num_count==0 && input=="-")
	 	    {
	 	    	minus=true;
	 	    	num_showing=false;
	 	    	num_count=1;
	 	    	panel_display.repaint();
	  	    } 
	   }
   }
	 
	 //point listener
	 class pointer implements ActionListener
	  {
	  	public void actionPerformed(ActionEvent event)
	  	 {
	  	 	if(state!=1)
	  	 	{
	  	 	
	  	 	if(((!minus && num_count>0)||(minus && num_count>1))&&(if_point==10))
	  	 	  {
	  	 	  	if_point=num_count;
	  	 	  	panel_display.repaint();
	  	 	  }
	  	 	 }
	  	 }
	  }
	  
	 //result listener
	 class result implements ActionListener
	  {
	  	public void actionPerformed(ActionEvent event)
	  	{
	  	 try{
	  	 
	  	 if(state==1)
	  	   {
	  	   	num_count=0;
	  	   }	
	  	  
         if(((num_count>0 && !minus)||(num_count>1 && minus)) && compute>0 )
	  	  {
	  	  	if(!minus)
	 	    { 
	 	      if(num_count>0)
	 	        {
	 	        	String s="";
	 	        	int i;
	 	        	for( i=0;i<if_point && i<num_count;i++)
	 	        	   s=s+display_num[i];
	 	        	   
	 	        	if(i<num_count) s=s+".";
	 	        	
	 	        	for(;i<num_count;i++)
	 	        	   s=s+display_num[i];   
	 	        	
	 	        	b=Double.parseDouble(s);
	 	                
	 	  	        if_point=10;
	 	  	        num_count=0; 
	 	  	        	  
	 	        }
	 	    }
	 	   else 
	 	    {
	 	  	     if(num_count>1)
	 	        {
	 	        	String s="-";
	 	        	int i;
	 	        	for( i=1;i<if_point && i<num_count;i++)
	 	        	   s=s+display_num[i];
	 	        	   
	 	        	if(i<num_count) s=s+"."; 
	 	        	
	 	        	for(;i<num_count;i++)
	 	        	   s=s+display_num[i];
	 	        	   
	 	        	b=Double.parseDouble(s);    
	 	        	    
	 	  	        if_point=10;
	 	  	     }
	 	   
	 	     }
	 	    } 
	 	     
	 	   if(compute>0)
	 	     {
	 	     	if(compute==1) a=a+b;
	 	     	else if(compute==2) a=a-b;
	 	     	else if(compute==3) a=a*b;
	 	     	else if(compute==5) a=Math.pow(a,b);
	 	     	else if(compute==4) 
	 	     	     {
	 	     	     	if(b==0) error=true;
	 	     	     	else a=a/b;
	 	     	     }
	 	     	     
	 	     	
	 	        num_toArray(a);
	 	        
	 	        if(display_num[num_count-1]==0 && if_point==num_count-1) 
	 	        {
	 	        	num_count--;
	 	        	if_point=10;
	 	        } 
	 	         
	 	     panel_display.repaint(); 	
	 	     num_showing=true; 
	 	     state=1;
	 	     
	 	     }
	 	   }
	 	     
	 	 catch(Exception e) 
	 	  	 	  	  { 
	 	  	 	  	  
	 	  	 	  	  error=true;
	 	  	 	  	  panel_display.repaint();
	 	  	 	  	  }   
	  }		 
	 	   
	 }
	 
  
  
   // the function become double to array	 
   private void num_toArray(double x)
     {
     	if(x>=0)
     	  {
     	  	minus=false;
     	  	
     	  	if(x>=9*Math.pow(10,99))
     	  	  {
     	  	  	error=true;
     	  	  }
     	  	 
     	  	 if(x>=10000000)
     	  	    {
     	  	  	double y=x;
     	  	  	int l;
     	  	  	char n;
	 	     	String s=String.valueOf(y);
	 	     	
	 	     	if(s.charAt(s.length()-3)=='E')
	 	     	  { 
	 	     	    String sd=""+s.charAt(s.length()-2)+s.charAt(s.length()-1);
	 	     	  	E=Integer.parseInt(sd);
	 	     	  	l=s.length()-3;
	 	     	  }
	 	        else 
	 	          {
	 	          	String sg=""+s.charAt(s.length()-1);
	 	          	E=Integer.parseInt(sg);
	 	          	l=s.length()-2;
	 	          }
	 	          
	 	     	if_point=1;
	 	     	
	 	     	String s1=""+s.charAt(0);
	 	     	display_num[0]=Integer.parseInt(s1);
	 	     	
	 	     	  	
	 	     	for(num_count=1;(num_count+1)<l && num_count<10;num_count++)
	 	     	  {
	 	     	  	n= s.charAt(num_count+1);
	 	     	  	String h=""+n;
	 	  	        display_num[num_count]=Integer.parseInt(h); 	
	 	     	  }
	 	     	  	
     	  	 }
     	  	else
     	  	  {
     	  	  	
     	  	  	
     	  	  	double y=x;
	 	     	String s=String.valueOf(y);
	 	        char n;
	 	        int l;
	 	        if(s.length()>3&&s.charAt(s.length()-3)=='E')
	 	           E=Integer.parseInt(""+s.charAt(s.length()-2)+s.charAt(s.length()-1));
	 	        else if(s.length()>4&&s.charAt(s.length()-4)=='E')
	 	           E=Integer.parseInt(""+s.charAt(s.length()-3)+s.charAt(s.length()-2)+s.charAt(s.length()-1)); 
	 	     	for(num_count=0;num_count<s.length() && (s.charAt(num_count)!='.') && num_count<10;num_count++)
	 	           {
	 	  	          n=s.charAt(num_count);
	 	              String h=""+n;
	 	  	          display_num[num_count]=Integer.parseInt(h);
	 	           }
	 	         if(num_count<10 && num_count<s.length())
	 	             if_point=num_count;  
	 	  
	 	         for(;(num_count+1)<s.length() && num_count<10;num_count++)
	 	             {
	 	  	              n=s.charAt(num_count+1);
	 	  	              String m=""+n;
	 	  	              display_num[num_count]=Integer.parseInt(m);
	 	             } 
	 	        } 
	 	     }
     	else 
     	     {
     	     	minus=true;
     	     	if(x<=-9*Math.pow(10,99))
     	     	   error=true;
     	     	if(x<=-10000000)
     	     	   {
     	     	   	 double y=x;
     	  	  	     int l;
     	  	  	     char n;
	 	     	     String s=String.valueOf(y);
	 	     	
	 	     	     if(s.charAt(s.length()-3)=='E')
	 	     	      { 
	 	     	         String sd=""+s.charAt(s.length()-2)+s.charAt(s.length()-1);
	 	     	  	     E=Integer.parseInt(sd);
	 	     	  	     l=s.length()-4;
	 	     	      }
	 	             else 
	 	              {
	 	          	     String sg=""+s.charAt(s.length()-1);
	 	          	     E=Integer.parseInt(sg);
	 	          	     l=s.length()-3;
	 	            }
	 	          
	 	     	if_point=2;
	 	     	
	 	     	String s1=""+s.charAt(1);
	 	     	display_num[1]=Integer.parseInt(s1);
	 	     	
	 	     	  	
	 	     	for(num_count=2;(num_count+1)<l && num_count<10;num_count++)
	 	     	  {
	 	     	  	n= s.charAt(num_count+1);
	 	     	  	String h=""+n;
	 	  	        display_num[num_count]=Integer.parseInt(h); 	
	 	     	  }
     	     	    }
     	     	else
     	     	   {
     	     	   	  double y=x;
	 	     	      String s=String.valueOf(y);
	 	        
	 	     	
	 	     	      char n;
	 	     	      if(s.length()>3&&s.charAt(s.length()-3)=='E')
	 	           E=Integer.parseInt(""+s.charAt(s.length()-2)+s.charAt(s.length()-1));
	 	        else if(s.length()>4&&s.charAt(s.length()-4)=='E')
	 	           E=Integer.parseInt(""+s.charAt(s.length()-3)+s.charAt(s.length()-2)+s.charAt(s.length()-1)); 
	 	     	      for(num_count=1;num_count<s.length() && (s.charAt(num_count)!='.') && num_count<10;num_count++)
	 	                {
	 	  	              n=s.charAt(num_count);
	 	                  String h=""+n;
	 	  	              display_num[num_count]=Integer.parseInt(h);
	 	                }
	 	              if(num_count<10 && num_count<s.length())
	 	                 if_point=num_count;  
	 	  
	 	              for(;(num_count+1)<s.length() && num_count<10;num_count++)
	 	                 {
	 	  	              n=s.charAt(num_count+1);
	 	  	              String m=""+n;
	 	  	              display_num[num_count]=Integer.parseInt(m);
	 	                 } 
     	     	   }    
     	     }     
            }	 
	 
	 
	 
   //clear listener
   class clear_listener implements ActionListener
     {
     	public void actionPerformed(ActionEvent event)
     	 {
     	 	num_count=0;
     	 	if_point=10;
     	 	minus=false;
     	 	error=false;

⌨️ 快捷键说明

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