?? 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 + -