📄 calculator.java
字号:
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 + -