Java中的带源代码的计算器

【Java中的带源代码的计算器】带有源代码的Java计算器:我们可以借助AWT / Swing的事件处理功能来开发Java计算器。让我们看看在Java中创建计算器的代码。

/********************************************* Save this file as MyCalculator.java to compile it use javac MyCalculator.java to use the calcuator do this java MyCalculator**********************************************/ import java.awt.*; import java.awt.event.*; /*********************************************/public class MyCalculator extends Frame {public boolean setClear=true; double number, memValue; char op; String digitButtonText[] = {"7", "8", "9", "4", "5", "6", "1", "2", "3", "0", "+/-", "." }; String operatorButtonText[] = {"/", "sqrt", "*", "%", "-", "1/X", "+", "=" }; String memoryButtonText[] = {"MC", "MR", "MS", "M+" }; String specialButtonText[] = {"Backspc", "C", "CE" }; MyDigitButton digitButton[]=new MyDigitButton[digitButtonText.length]; MyOperatorButton operatorButton[]=new MyOperatorButton[operatorButtonText.length]; MyMemoryButton memoryButton[]=new MyMemoryButton[memoryButtonText.length]; MySpecialButton specialButton[]=new MySpecialButton[specialButtonText.length]; Label displayLabel=new Label("0", Label.RIGHT); Label memLabel=new Label(" ", Label.RIGHT); final int FRAME_WIDTH=325, FRAME_HEIGHT=325; final int HEIGHT=30, WIDTH=30, H_SPACE=10, V_SPACE=10; final int TOPX=30, TOPY=50; /////////////////////////// MyCalculator(String frameText)//constructor { super(frameText); int tempX=TOPX, y=TOPY; displayLabel.setBounds(tempX, y, 240, HEIGHT); displayLabel.setBackground(Color.BLUE); displayLabel.setForeground(Color.WHITE); add(displayLabel); memLabel.setBounds(TOPX, TOPY+HEIGHT+ V_SPACE, WIDTH, HEIGHT); add(memLabel); // set Co-ordinates for Memory Buttons tempX=TOPX; y=TOPY+2*(HEIGHT+V_SPACE); for(int i=0; i< memoryButton.length; i++) { memoryButton[i]=new MyMemoryButton(tempX, y, WIDTH, HEIGHT, memoryButtonText[i], this); memoryButton[i].setForeground(Color.RED); y+=HEIGHT+V_SPACE; }//set Co-ordinates for Special Buttons tempX=TOPX+1*(WIDTH+H_SPACE); y=TOPY+1*(HEIGHT+V_SPACE); for(int i=0; i< specialButton.length; i++) { specialButton[i]=new MySpecialButton(tempX, y, WIDTH*2, HEIGHT, specialButtonText[i], this); specialButton[i].setForeground(Color.RED); tempX=tempX+2*WIDTH+H_SPACE; }//set Co-ordinates for Digit Buttons int digitX=TOPX+WIDTH+H_SPACE; int digitY=TOPY+2*(HEIGHT+V_SPACE); tempX=digitX; y=digitY; for(int i=0; i< digitButton.length; i++) { digitButton[i]=new MyDigitButton(tempX, y, WIDTH, HEIGHT, digitButtonText[i], this); digitButton[i].setForeground(Color.BLUE); tempX+=WIDTH+H_SPACE; if((i+1)%3==0){tempX=digitX; y+=HEIGHT+V_SPACE; } }//set Co-ordinates for Operator Buttons int opsX=digitX+2*(WIDTH+H_SPACE)+H_SPACE; int opsY=digitY; tempX=opsX; y=opsY; for(int i=0; i< operatorButton.length; i++) { tempX+=WIDTH+H_SPACE; operatorButton[i]=new MyOperatorButton(tempX, y, WIDTH, HEIGHT, operatorButtonText[i], this); operatorButton[i].setForeground(Color.RED); if((i+1)%2==0){tempX=opsX; y+=HEIGHT+V_SPACE; } }addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent ev) {System.exit(0); } }); setLayout(null); setSize(FRAME_WIDTH, FRAME_HEIGHT); setVisible(true); } ////////////////////////////////// static String getFormattedText(double temp) { String resText=""+temp; if(resText.lastIndexOf(".0")> 0) resText=resText.substring(0, resText.length()-2); return resText; } //////////////////////////////////////// public static void main(String []args) { new MyCalculator("Calculator - srcmini"); } }/*******************************************/class MyDigitButton extends Button implements ActionListener { MyCalculator cl; ////////////////////////////////////////// MyDigitButton(int x, int y, int width, int height, String cap, MyCalculator clc) { super(cap); setBounds(x, y, width, height); this.cl=clc; this.cl.add(this); addActionListener(this); } //////////////////////////////////////////////// static boolean isInString(String s, char ch) { for(int i=0; i< s.length(); i++) if(s.charAt(i)==ch) return true; return false; } ///////////////////////////////////////////////// public void actionPerformed(ActionEvent ev) { String tempText=((MyDigitButton)ev.getSource()).getLabel(); if(tempText.equals(".")) { if(cl.setClear) {cl.displayLabel.setText("0."); cl.setClear=false; } else if(!isInString(cl.displayLabel.getText(), '.')) cl.displayLabel.setText(cl.displayLabel.getText()+"."); return; }int index=0; try{ index=Integer.parseInt(tempText); }catch(NumberFormatException e){return; }if (index==0 & & cl.displayLabel.getText().equals("0")) return; if(cl.setClear) {cl.displayLabel.setText(""+index); cl.setClear=false; } else cl.displayLabel.setText(cl.displayLabel.getText()+index); }//actionPerformed }//class defination/********************************************/class MyOperatorButton extends Button implements ActionListener { MyCalculator cl; MyOperatorButton(int x, int y, int width, int height, String cap, MyCalculator clc) { super(cap); setBounds(x, y, width, height); this.cl=clc; this.cl.add(this); addActionListener(this); } /////////////////////// public void actionPerformed(ActionEvent ev) { String opText=((MyOperatorButton)ev.getSource()).getLabel(); cl.setClear=true; double temp=Double.parseDouble(cl.displayLabel.getText()); if(opText.equals("1/x")) { try {double tempd=1/(double)temp; cl.displayLabel.setText(MyCalculator.getFormattedText(tempd)); } catch(ArithmeticException excp) {cl.displayLabel.setText("Divide by 0."); } return; } if(opText.equals("sqrt")) { try {double tempd=Math.sqrt(temp); cl.displayLabel.setText(MyCalculator.getFormattedText(tempd)); } catch(ArithmeticException excp) {cl.displayLabel.setText("Divide by 0."); } return; } if(!opText.equals("=")) { cl.number=temp; cl.op=opText.charAt(0); return; } // process = button pressed switch(cl.op) { case '+': temp+=cl.number; break; case '-': temp=cl.number-temp; break; case '*': temp*=cl.number; break; case '%': try{temp=cl.number%temp; } catch(ArithmeticException excp) {cl.displayLabel.setText("Divide by 0."); return; } break; case '/': try{temp=cl.number/temp; } catch(ArithmeticException excp) {cl.displayLabel.setText("Divide by 0."); return; } break; }//switchcl.displayLabel.setText(MyCalculator.getFormattedText(temp)); //cl.number=temp; }//actionPerformed }//class/****************************************/class MyMemoryButton extends Button implements ActionListener { MyCalculator cl; ///////////////////////////////// MyMemoryButton(int x, int y, int width, int height, String cap, MyCalculator clc) { super(cap); setBounds(x, y, width, height); this.cl=clc; this.cl.add(this); addActionListener(this); } //////////////////////////////////////////////// public void actionPerformed(ActionEvent ev) { char memop=((MyMemoryButton)ev.getSource()).getLabel().charAt(1); cl.setClear=true; double temp=Double.parseDouble(cl.displayLabel.getText()); switch(memop) { case 'C': cl.memLabel.setText(" "); cl.memValue=http://www.srcmini.com/0.0; break; case'R': cl.displayLabel.setText(MyCalculator.getFormattedText(cl.memValue)); break; case 'S': cl.memValue=http://www.srcmini.com/0.0; case'+': cl.memValue+=Double.parseDouble(cl.displayLabel.getText()); if(cl.displayLabel.getText().equals("0") || cl.displayLabel.getText().equals("0.0")) cl.memLabel.setText(" "); else cl.memLabel.setText("M"); break; }//switch }//actionPerformed }//class/*****************************************/class MySpecialButton extends Button implements ActionListener { MyCalculator cl; MySpecialButton(int x, int y, int width, int height, String cap, MyCalculator clc) { super(cap); setBounds(x, y, width, height); this.cl=clc; this.cl.add(this); addActionListener(this); } ////////////////////// static String backSpace(String s) { String Res=""; for(int i=0; i< s.length()-1; i++) Res+=s.charAt(i); return Res; }////////////////////////////////////////////////////////// public void actionPerformed(ActionEvent ev) { String opText=((MySpecialButton)ev.getSource()).getLabel(); //check for backspace button if(opText.equals("Backspc")) { String tempText=backSpace(cl.displayLabel.getText()); if(tempText.equals("")) cl.displayLabel.setText("0"); else cl.displayLabel.setText(tempText); return; } //check for "C" button i.e. Reset if(opText.equals("C")) { cl.number=0.0; cl.op=' '; cl.memValue=http://www.srcmini.com/0.0; cl.memLabel.setText(" "); }//it must be CE button pressed cl.displayLabel.setText("0"); cl.setClear=true; }//actionPerformed }//class/********************************************* Features not implemented and few bugsi)No coding done for "+/-" button. ii) Menubar is not included. iii)Not for Scientific calculation iv)Some of the computation may lead to unexpected result due to the representation of Floating point numbers in computer is an approximation to the given value that can be stored physically in memory. ***********************************************/

Java中的带源代码的计算器

文章图片

    推荐阅读