<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. java語言

    java計算器綜合實例學習教程

    時間:2025-01-21 17:48:26 java語言 我要投稿
    • 相關推薦

    java計算器綜合實例學習教程

      下面是百分網小編帶來的Java計算器綜合實例學習教程,歡迎學習!

    java計算器綜合實例學習教程

      本節給出了一個計算器的綜合實例,該實例主要利用了本章及上一章所涉及的SWING組件及組件事件的處理來實現的,在實現的過程中還使用到了異常處理的知識。

      [例8-14]

      import java.awt.*;

      import java.awt.event.*;

      import javax.swing.*;

      class Calculator extends JFrame{

      String[] buttons =

      new String[]{"7","8","9","/","4","5","6","*","1","2","3","-","0","+/-",".","+"};

      JPanel pWest = new JPanel();

      JPanel pMain = new JPanel();

      JPanel pNorth = new JPanel();

      JPanel pMain_North = new JPanel();

      JPanel pMain_Center = new JPanel();

      JPanel pMain_East = new JPanel();

      JButton buttonMain[];//包括數字0-9以及'+','-','*','+'/'.','+/-'

      JButton buttonNorth[];//包括Back,CE,C

      JButton buttonEast[];//包括sqrt,%,1/x,=

      JTextField fieldResult = new JTextField();

      //

      static private String value1="";//第一個操作數

      static private String value2="";//第二個操作數

      static private String oper="";//操作符

      static private String result="";//運算結果

      static private String lastChar="";//相比當前,其上一個按下按鈕的字符

      static private boolean value1Input=true;//處于第一個操作數輸入情況

      static private boolean value2Input=false;//出于第二個操作數輸入情況

      static private boolean start = false;//是否開始計算,主要是用于檢測剛開始時按下非數字鍵的情況。

      public Calculator(String title){

      super(title);

      Container contentPane = this.getContentPane();

      fieldResult.setHorizontalAlignment(JTextField.RIGHT);//右對齊

      pMain_Center.setLayout(new GridLayout(4,4,5,5));

      buttonMain= new JButton[buttons.length];

      for(int i=0;i

      buttonMain[i] = new JButton(buttons[i]);

      pMain_Center.add(buttonMain[i]);

      }

      buttonNorth = new JButton[3];

      buttonNorth[0] = new JButton("Back");

      buttonNorth[1] = new JButton("CE");

      buttonNorth[2] = new JButton("C");

      pMain_North.setLayout(new GridLayout(1,3,5,5));

      pMain_North.add(buttonNorth[0]);

      pMain_North.add(buttonNorth[1]);

      pMain_North.add(buttonNorth[2]);

      buttonEast = new JButton[4];

      buttonEast[0] = new JButton("sqrt");

      buttonEast[1] = new JButton("%");

      buttonEast[2] = new JButton("1/x");

      buttonEast[3] = new JButton("=");

      pMain_East.setLayout(new GridLayout(4,1,5,5));

      pMain_East.add(buttonEast[0]);

      pMain_East.add(buttonEast[1]);

      pMain_East.add(buttonEast[2]);

      pMain_East.add(buttonEast[3]);

      contentPane.add(fieldResult,BorderLayout.NORTH);

      pMain.setLayout(new BorderLayout(5,5));

      pMain.add(pMain_Center,BorderLayout.WEST);

      pMain.add(pMain_East,BorderLayout.EAST);

      pMain.add(pMain_North,BorderLayout.NORTH);

      contentPane.add(pMain,BorderLayout.CENTER);

      pack();

      setVisible(true);

      //注冊監x器

      MyActionListener listener = new MyActionListener();

      for(int i=0;i

      buttonMain[i].addActionListener(listener);

      }

      buttonNorth[0].addActionListener(listener);//Back

      buttonEast[3].addActionListener(listener);//"="

      buttonNorth[2].addActionListener(listener);//"C"

      buttonMain[13].setEnabled(false);//設置+/-不可用

      buttonMain[14].setEnabled(false);//設置.不可用

      buttonNorth[1].setEnabled(false);//設置CE不可用

      buttonEast[0].setEnabled(false);//設置sqrt不可用

      buttonEast[1].setEnabled(false);//設置%不可用

      buttonEast[2].setEnabled(false);//設置1/x不可用

      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      }

      private class MyActionListener implements ActionListener{

      public void actionPerformed(ActionEvent e) {

      String str = e.getActionCommand();

      //數字鍵

      if(Character.isDigit(str.charAt(0))){

      handalDigit(str);

      }

      if(start == true){

      if(str.equals("=")){//"="鍵

      handalEqual(str);

      return;

      }

      //Back、C鍵處理,完善本程序時可在下面的語句中添加對其他按鈕的處理

      if(str.equals("Back")||str.equals("C")){

      handalNonOper(str);

      }

      //'+','-','*','+'/'的處理,完善本程序時可添加sqrt,%等操作符的處理

      if(str.equals("+")||str.equals("-")||str.equals("*")||str.equals("/")){

      handalOper(str);

      }

      }

      }

      //處理數字,str表示按鈕上的文字

      private void handalDigit(String str){

      char currentChar=str.charAt(0);//獲得按下的字符;

      if(!lastChar.equals("=")){

      if(value2Input == false){

      value1+=String.valueOf(currentChar);

      if(value1.charAt(0)=='0'){//第一個數字為0

      value1="0";

      }

      fieldResult.setText(value1);

      }

      else{

      value2+=String.valueOf(currentChar);

      if(value2.charAt(0)=='0'){//第一個數字為0

      value2="0";

      }

      fieldResult.setText(value2);

      }

      start = true;

      lastChar = str;

      }

      else{//是=

      resetAllValue();

      value1+=str;

      fieldResult.setText(value1);

      }

      printAllValue();

      }

      //處理"="鍵

      private void handalEqual(String str){

      if(Character.isDigit(lastChar.charAt(0)) && value2.length()>0){

      handalOper(str);

      }

      }

      //處理運算符,暫時只處理+,-,*,/str表示按鈕上的文字

      private void handalOper(String str){

      if(start == true){

      if(value1.length()>0 && value2.length()>0){

      result=operationResult(value1,value2,oper.charAt(0));

      fieldResult.setText(result);

      if(!result.equals("除數不能為零")){

      value1=result;

      value2="";

      }

      }

      else{//說明第一個操作數輸入結束,操作符結束,開始輸入第二個操作數

      value1Input=false;

      value2Input=true;

      }

      oper = str;//記錄操作符

      lastChar = str;//記錄最后一個字符

      printAllValue();

      }

      }

      //處理非運算符,但不是數字,如Back,C等鍵,str表示按鈕上的文字

      private void handalNonOper(String str){

      if(str.equals("Back")){//Back鍵處理

      if(Character.isDigit(lastChar.charAt(0)) == true){//必須是前一個字符是數字

      if(value2Input == true){

      if(value2.length()>0){

      value2 = value2.substring(0,value2.length()-1);

      }

      fieldResult.setText(value2);

      }

      else{

      if(value1.length()>0){

      value1 = value1.substring(0,value1.length()-1);

      }

      else{

      resetAllValue();

      }

      fieldResult.setText(value1);

      }

      }

      printAllValue();

      }

      if(str.equals("C")){//C鍵處理

      resetAllValue();

      fieldResult.setText("");

      printAllValue();

      }

      }

      //對兩個字符串value1和value2表示的整數做運算,oper表示運算符

      private String operationResult(String value1,String value2,char oper){

      String result;

      try{

      switch(oper){

      case '+':

      result = String.valueOf(Integer.parseInt(value1)+Integer.parseInt(value2));

      break;

      case '-':

      result = String.valueOf(Integer.parseInt(value1)-Integer.parseInt(value2));

      break;

      case '*':

      result = String.valueOf(Integer.parseInt(value1)*Integer.parseInt(value2));

      break;

      case '/':

      if(value2.equals("0")){

      result="除數不能為零";

      resetAllValue();//所有值置初值

      }

      else{

      result = String.valueOf(Integer.parseInt(value1)/Integer.parseInt(value2));

      }

      break;

      default:

      result="error";

      }

      }

      catch(Exception ex){

      result = "操作數或結果超過整數范圍";

      resetAllValue();

      }

      return result;

      }

      //重置變量值

      private void resetAllValue(){

      value1="";//第一個操作數

      value2="";//第二個操作數

      oper="";//操作符

      result="";//運算結果

      lastChar="";//相比當前,其上一個按下按鈕的字符

      value1Input=true;//處于第一個操作數輸入情況

      value2Input=false;//出于第二個操作數輸入情況

      start = false;

      }

      //打印變量值

      private void printAllValue(){

      System.out.println("| --------Values display----------------");

      System.out.println("| value1:" + value1);

      System.out.println("| value2:" + value2);

      System.out.println("| oper:" + oper);

      System.out.println("| result:" + result);

      System.out.println("| lastChar:" + lastChar);

      System.out.println("| value1Input:" + value1Input);

      System.out.println("| value2Input:" + value2Input);

      System.out.println("| start:" + start);

      System.out.println("| --------------------------------------");

      }

      }

      }

      public class Calculator{

      public static void main(String[] args) {

      new Calculator("計算器");

      }

      }

      程序運行主界面如下:

      圖8-18 計算器程序運行主界面

      該程序實現了加減乘除運算,且充分考慮了各種異常情況,一般不會出現在按下某個按鍵時出現程序報異常的錯誤,對于程序中未實現的按鈕功能,運行界面中都以灰色按鈕的形式出現,讀者可在研究本程序的基礎上完成這些按鍵的功能。

    【java計算器綜合實例學習教程】相關文章:

    Java的特點學習教程08-27

    Java中的== 和equals()方法詳解與實例教程08-03

    Java數組的基礎學習教程08-12

    Java數組的基本學習教程08-22

    Java對話框學習教程05-31

    java編譯計算器08-11

    python概率計算器實例分析11-11

    Axure交互實例教程07-19

    java教程之Java編程基礎09-12

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人