📄 calculator.java
字号:
/* * Class.java * * Created on 2004年10月2日, 下午9:16 *//** * * @author hpj *///因为第一次计算的结果,直接作为下一次的初始值的一部分或全部//若要进行第二次计算,请重载Applet,或用上一次的结果*0,将不影响您的第二次使用import java.awt.*;import java.awt.event.*;import java.util.*;import java.applet.Applet;public class Calculator extends Applet implements ActionListener{ protected double data[]={0.0,0.0,0.0,0.0};//data[0]始终显示在计算器上的数据,data[1,2,3]用于临时存放三个计算变量 protected int simple[]={11,11};//存贮运算符号,11表示+号 protected int t=1,j=0;//用于标志小数;t=1时为整数;j用于纪录小数位数 protected double k;//计算每次输入的小数值 protected Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,bjia,bjian,bcheng,bchu,bdian,bdeng;//对应0…9,+,-,*,/,.,= protected TextField tf;//输出文本域 protected Object makebutton(String name, GridBagLayout gridbag, GridBagConstraints c){//创建按钮 Button button=new Button(name); gridbag.setConstraints(button, c); add(button); button.addActionListener(this); return button; } protected Object maketextfield(String name, GridBagLayout gridbag, GridBagConstraints c){//创建文本域 TextField tf=new TextField("0.0",20); gridbag.setConstraints(tf,c); add(tf); tf.setEditable(false); tf.addActionListener(this); return tf; } public void init(){//用GridBagLayout排列界面 GridBagLayout gridbag=new GridBagLayout(); GridBagConstraints c=new GridBagConstraints(); setFont(new Font("Helvetica", Font.PLAIN, 24)); setLayout(gridbag); c.fill=GridBagConstraints.BOTH;//使组建完全占满显示区域 c.weightx=1.0;//容器扩大时,自动占满额外空间(水平和竖直方向) c.weighty=1.0; c.gridwidth=GridBagConstraints.REMAINDER; //使TextField为最后一个元素,并影响到下一个元素 tf=(TextField)maketextfield("tf",gridbag,c); c.gridwidth=1; b7=(Button)makebutton("7",gridbag,c);//创建按钮b7 b8=(Button)makebutton("8",gridbag,c); b9=(Button)makebutton("9",gridbag,c); c.gridwidth=GridBagConstraints.REMAINDER; bjia=(Button)makebutton("+",gridbag,c); c.weightx=0.0;//恢复默认值 c.gridwidth=1;//每个元素占用一个网格 b4=(Button)makebutton("4",gridbag,c); b5=(Button)makebutton("5",gridbag,c); b6=(Button)makebutton("6",gridbag,c); c.gridwidth=GridBagConstraints.REMAINDER; bjian=(Button)makebutton("-",gridbag,c); c.gridwidth=1; b1=(Button)makebutton("1",gridbag,c); b2=(Button)makebutton("2",gridbag,c); b3=(Button)makebutton("3",gridbag,c); c.gridwidth=GridBagConstraints.REMAINDER; bcheng=(Button)makebutton("*",gridbag,c); c.gridwidth=1; b0=(Button)makebutton("0",gridbag,c); bdian=(Button)makebutton(".",gridbag,c); bdeng=(Button)makebutton("=",gridbag,c); bchu=(Button)makebutton("/",gridbag,c); c.weighty=0.0; //恢复默认值 setSize(400,300);//设定容器大小,如果调用函数使用了getPreferredSize函数,那么将不起作用 } public static void main(String args[]){ Frame f=new Frame("Calculator"); Calculator tocow=new Calculator(); tocow.init();//调用创建界面函数 f.add("Center", tocow); f.pack(); f.setSize(f.getPreferredSize()); f.setVisible(true); } public void actionPerformed(ActionEvent e) { //完成具体的计算功能 if(data[0]==0){//计算器的初始值为0 if(back(e)==0){//第一次按下为0,则: if(t==1){ tf.setText("0.0"); } else{//已经按下点号,则“j+1”,用于纪录下一位数字离小数点的距离 k=0; j++; } } else{//第一次按下不为0 if(t==1){ if(back(e)==10) t=0; else{ if(back(e)!=15){//没有按下“=” if(!((back(e)==11)||(back(e)==12)||(back(e)==13)||(back(e)==14))){//不是"+","-","*","/" data[0]=data[0]*10+back(e); tf.setText(""+data[0]); } else{//如果按了“/” 注意除数不能为0,否则计算机处理为Infinity if(data[1]==0){// 放入data[1]里 data[1]=data[0]; data[0]=0; simple[0]=back(e); } else if(data[1]!=0&&data[2]==0){//放如data[2]里 data[2]=data[0]; data[0]=0; simple[1]=back(e); } else{//放如data[3]里 data[3]=data[0]; data[0]=0; } } } else{//按下“=”计算完毕 if(data[0]!=0){//把最后一个数字写入data数组中 if(data[1]==0){ data[1]=data[0]; data[0]=0; } else if(data[1]!=0&&data[2]==0){ data[2]=data[0]; data[0]=0; } else{ data[3]=data[0]; data[0]=0; } tf.setText(""+calculator()); data[0]=calculator();//自动纪录结果,可以用于第二次计算 data[1]=data[2]=data[3]=0;//初始化为开始状态 simple[0]=simple[1]=11; } else{ tf.setText(""+calculator()); data[0]=calculator(); data[1]=data[2]=data[3]=0; simple[0]=simple[1]=11; }//按下“=”计算完毕 } } } else{//开始计算按下.号,即进行浮点数运算 if(back(e)!=15){//没有按下“=” if(!((back(e)==11)||(back(e)==12)||(back(e)==13)||(back(e)==14))){//不是"+","-","*","/" if(back(e)==10) t=0; else{ k=back(e); j++; } for(int i=j;i>0;i--){ k=(double)k/10; } data[0]+=k; tf.setText(""+data[0]); } else{//如果按了“/” 注意除数不能为0 t=1;//恢复为整数,并且计数器累计清零 j=0; if(data[1]==0){// 放如data[1]里 data[1]=data[0]; data[0]=0; simple[0]=back(e); } else if(data[1]!=0&&data[2]==0){//放如data[2]里 data[2]=data[0]; data[0]=0; simple[1]=back(e); } else{//放如data[3]里 data[3]=data[0]; data[0]=0; } } } else{//按下“=”计算完毕 t=1;//恢复为整数,并且计数器清零 j=0; if(data[0]!=0){//把最后一个数字写入data数组中 if(data[1]==0){ data[1]=data[0]; data[0]=0; } else if(data[0]!=0&&data[1]!=0&&data[2]==0){ data[2]=data[0]; data[0]=0; } else{ data[3]=data[0]; data[0]=0; } tf.setText(""+calculator()); data[0]=calculator(); data[1]=data[2]=data[3]=0; simple[0]=simple[1]=11; } else{ tf.setText(""+calculator()); data[0]=calculator(); data[1]=data[2]=data[3]=0; simple[0]=simple[1]=11; t=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -