程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 我做的一個計算器小程序

我做的一個計算器小程序

編輯:JAVA編程入門知識

  

/**
@author Song Liang Peng
@version 2005.7.23
*/
import java.awt.*;
import java.awt.event.*;
public class Counter extends Frame implements ActionListener
{
TextField t=new TextField("",15);
 Panel p1=new Panel();
 Panel p2=new Panel();
 Button[] b=new Button[10];
 Button bAdd=new Button("+");
 Button bSub=new Button("-");
 Button bMul=new Button("*");
 Button bDiv=new Button("/");
 Button bPoint=new Button(".");
 Button bEqual=new Button("=");
 Button bSqrt=new Button("開平方");
 Button bNull=new Button("清空");
String str1="";   //str1和str2存放兩個輸入的數
 String str2="";
 String operator=null;  //存放加減乘除以及開平方的符號
 boolean first=true;  //檢驗輸入的是否為第一個數
 int countOper=0;  //累計輸入符號的個數,連加連減等操作中會用到
 double result=0.0;  //暫存結果
 double num1=0.0,num2=0.0; //兩個輸入的數做運算時轉化為double存放
 boolean error=false;  //檢驗除數是否為0
//構造方法
 public Counter()
 {
 super("counter");
 t.setEditable(false);
for(int i=0;i<b.length;i++)
 {
  b[i]=new Button(String.valueOf(i));
  p1.add(b[i]);
  b[i].setActionCommand("number");
  b[i].addActionListener(this);
 }
 p1.add(bPoint);
 bPoint.setActionCommand("number");
 p1.add(bAdd);   //數字鍵,符號鍵放置在panel的p1中
 p1.add(bSub);
 p1.add(bMul);
 p1.add(bDiv);
 p1.add(bEqual);
 p2.add(bSqrt);   //開平方和清空鍵放置在panel的p2中
 p2.add(bNull);
 bAdd.setActionCommand("oper");
 bSub.setActionCommand("oper");
 bMul.setActionCommand("oper");
 bDiv.setActionCommand("oper");
bAdd.addActionListener(this);
 bSub.addActionListener(this);
 bMul.addActionListener(this);
 bDiv.addActionListener(this);
 bPoint.addActionListener(this);
 bEqual.addActionListener(this);
 bSqrt.addActionListener(this);
 bNull.addActionListener(this);
p1.setLayout(new GridLayout(4,4,5,5));
 p2.setLayout(new FlowLayout());
 add(t,"North");   //frame的north放置輸入框,panel放置在center和south
 add(p1,"Center");
 add(p2,"South");
 setLocation(400,200);
 setSize(200,200);
 setBackground(Color.red);
 setVisible(true);
addWindowListener(new WindowAdapter(){  //關閉窗口
  public void windowClosing(WindowEvent e)
  {
  System.exit(0);
  }
 });
 }
//實現接口ActionListener
 public void actionPerformed(ActionEvent e)
 {
 Button temp=(Button)e.getSource();
if(e.getActionCommand().equals("number"))
 {
  if(first)
  {
  str1=str1+temp.getLabel();
  t.setText(str1);
  }
  else
  {
  str2=str2+temp.getLabel();
  t.setText(str2);
  }
 }
 else if(e.getActionCommand().equals("oper"))
 {
  if(str1=="")  //如果還沒有輸入數就點擊運算符執行if,127行同理
  {
  countOper=0;
  first=true;
  }
  else
  {
  countOper++;
  if(countOper>1)
  {
   getResult();
  }
  operator=temp.getLabel();
  first=false;
  }
 }
 else if(e.getActionCommand().equals("開平方"))
 {
  if(str1=="")
  {
  countOper=0;
  first=true;
  }
  else
  {
  countOper=1;
  if(countOper>1)
  {
   getResult();
  }
  double d=Math.sqrt(Double.parseDouble(str1));
  str1=String.valueOf(d);
  t.setText(String.valueOf(d));
  first=false;
  } 
 }
 else if(e.getActionCommand().equals("清空"))
 {
  str1="";
  str2="";
  t.setText("");
  countOper=0;
  first=true;
  error=false;
 }
 else if(e.getActionCommand().equals("="))
 {
  if((str1=="")||(str2==""))  //兩個數沒有輸全就點擊等號,執行if
  {
  countOper=0;
  first=true;
  }
  else
  {
  getResult();
  countOper=0;
  }
 }
 }
//運算結果的方法
 public void getResult()
 {
 num1=Double.parseDouble(str1);
 num2=Double.parseDouble(str2);
if(operator.equals("+"))
 {
  result=num1+num2;
 }
 else if(operator.equals("-"))
 {
  result=num1-num2;
 }
 else if(operator.equals("*"))
 {
  result=num1*num2;
 }
 else if(operator.equals("/"))
 {
  if(num2==0.0)  //除數為0的處理方法
  {
  error=true;
  }
  else
  {
  result=num1/num2;
  }
 }
 if(error)
 {
  t.setText("error");
 }
 else
 {
  t.setText(String.valueOf(result));
  str1=String.valueOf(result); //運算後把結果放入str1中,str2清空,為連加連減等操作做准備
  str2="";
 }
 }
//主方法
 public static void main(String[] args)
 {
 new Counter();
 }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved