求java计算器程序

只要加法就行了,越简单越好,最好有注释
计算器,要能够实现得,有图形界面,完全得,一楼那位未免有点太幽默了

我去年的作业也是计算器,界面挺漂亮的,小东西,所以没有注释
/**
* @(#)Calculator.java
*
*
* @author �Թ���
* @version 1.00 2007/5/29
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.*;

public class Calculator extends JFrame implements ActionListener{
private JButton[] jbtRight=new JButton[24];
private JButton[] jbtLeft=new JButton[15];
private String[] nameRigth={"7","8","9","/","4","5","6","*","1","2","3","-","0","+/-",".","+","A","B","C","=","D","E","F","inf"};
private String[] nameLeft={"PI","(",")","dms","Exp","ln","sin","x^y","lg","cos","x^3","n!","tan","x^2","1/x"};
private JButton BackSpace=new JButton("BackSpace");
private JButton ce=new JButton("CE");
private JButton c=new JButton("C");
private JRadioButton hex,dec,bin,d,s;
private String outString="";
private String string="";
private JTextField text=new JTextField(outString,40);
private Operate operate;
private int times=0;
private boolean isPositive=true;
private boolean isCompute=false;
private boolean isClear=false;
private boolean isDegree=false;

public Calculator() {
JPanel panel1=new JPanel();
JPanel panel2=new JPanel();
JPanel panel3=new JPanel();
JPanel panel4=new JPanel(new BorderLayout(10,5));
JPanel panel5=new JPanel();
JPanel panel6=new JPanel();
JPanel panel7=new JPanel();

panel1.setLayout(new GridLayout(6,4,5,5));
for(int i=0;i<nameRigth.length;i++){
jbtRight[i]=new JButton(nameRigth[i]);
jbtRight[i].addActionListener(this);
panel1.add(jbtRight[i]);
}

panel2.setLayout(new GridLayout(5,3,5,5));
for(int i=0;i<nameLeft.length;i++){
jbtLeft[i]=new JButton(nameLeft[i]);
jbtLeft[i].addActionListener(this);
panel2.add(jbtLeft[i]);
}
panel3.setLayout(new FlowLayout(FlowLayout.RIGHT,5,5));
panel3.add(BackSpace);
panel3.add(ce);
panel3.add(c);
BackSpace.addActionListener(this);
ce.addActionListener(this);
c.addActionListener(this);

panel4.add(panel1,BorderLayout.CENTER);
panel4.add(panel3,BorderLayout.NORTH);

panel5.setLayout(new FlowLayout());
panel5.setBorder(new EtchedBorder());
panel5.add(hex=new JRadioButton("hex"));
panel5.add(dec=new JRadioButton("dec"));
panel5.add(bin=new JRadioButton("bin"));
ButtonGroup group1=new ButtonGroup();
group1.add(hex);
group1.add(dec);
group1.add(bin);
hex.addActionListener(this);
dec.addActionListener(this);
bin.addActionListener(this);

panel6.setLayout(new FlowLayout());
panel6.setBorder(new EtchedBorder());
panel6.add(d=new JRadioButton("d"));
panel6.add(s=new JRadioButton("s"));
ButtonGroup group2=new ButtonGroup();
group1.add(d);
group1.add(s);
d.addActionListener(this);
s.addActionListener(this);

panel7.setLayout(new BorderLayout(10,5));
panel7.add(panel2,BorderLayout.SOUTH);
panel7.add(panel5,BorderLayout.CENTER);
panel7.add(panel6,BorderLayout.NORTH);

text.setHorizontalAlignment(SwingConstants.RIGHT);
text.addActionListener(this);
text.setEditable(false);

getContentPane().setLayout(new BorderLayout(10,5));
getContentPane().add(text,BorderLayout.NORTH);
getContentPane().add(panel4,BorderLayout.WEST);
getContentPane().add(panel7,BorderLayout.EAST);

}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Calculator frame=new Calculator();
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Calculator");
frame.setVisible(true);

}
public void actionPerformed(ActionEvent e){
//radio buttons
//d & s
if(e.getSource()==d){
isDegree=true;
}
else if(e.getSource()==s){
isDegree=false;
}
//hex,dec,bin

//buttons
if(e.getActionCommand().equals("inf")){
text.setText("Calculator beta 0.1,made by zgy 061251242");
}
if(e.getActionCommand().equals("0")){
outString+="0";
string+="0";
text.setText(outString);
}
if(e.getActionCommand().equals("1")){
outString+="1";
string+="1";
text.setText(outString);
}
if(e.getActionCommand().equals("2")){
outString+="2";
string+="2";
text.setText(outString);
}
if(e.getActionCommand().equals("3")){
outString+="3";
string+="3";
text.setText(outString);
}
if(e.getActionCommand().equals("4")){
outString+="4";
string+="4";
text.setText(outString);
}
if(e.getActionCommand().equals("5")){
outString+="5";
string+="5";
text.setText(outString);
}
if(e.getActionCommand().equals("6")){
outString+="6";
string+="6";
text.setText(outString);
}
if(e.getActionCommand().equals("7")){
outString+="7";
string+="7";
text.setText(outString);
}
if(e.getActionCommand().equals("8")){
outString+="8";
string+="8";
text.setText(outString);
}
if(e.getActionCommand().equals("9")){
outString+="9";
string+="9";
text.setText(outString);
}
//HEX
if(e.getActionCommand().equals("A")){
outString+="A";
string+="A";
text.setText(outString);
}
if(e.getActionCommand().equals("B")){
outString+="B";
string+="B";
text.setText(outString);
}
if(e.getActionCommand().equals("C")){
outString+="C";
string+="C";
text.setText(outString);
}
if(e.getActionCommand().equals("D")){
outString+="D";
string+="D";
text.setText(outString);
}
if(e.getActionCommand().equals("E")){
outString+="E";
string+="E";
text.setText(outString);
}
if(e.getActionCommand().equals("F")){
outString+="F";
string+="F";
text.setText(outString);
}
//+-*/
if(e.getActionCommand().equals("+")){
outString+="+";
string+="+";
text.setText(outString);
}
if(e.getActionCommand().equals("-")){
outString+="-";
string+="-";
text.setText(outString);
}
if(e.getActionCommand().equals("*")){
outString+="*";
string+="*";
text.setText(outString);
}
if(e.getActionCommand().equals("/")){
outString+="/";
string+="/";
text.setText(outString);
}
//.
if(e.getActionCommand().equals(".")){
outString+=".";
string+=".";
text.setText(outString);
}
//pi
if(e.getActionCommand().equals("PI")){
outString+="PI";
string+=Math.PI;
text.setText(outString);
}
//dms
if(e.getActionCommand().equals("dms")){
outString=""+Math.rint(Double.parseDouble(outString)/180*Math.PI*100000000)/100000000.0;
string=""+Math.rint(Double.parseDouble(outString)/180*Math.PI*100000000)/100000000.0;
text.setText(outString);
}
//()
if(e.getActionCommand().equals("(")){
outString+="(";
string+="(";
text.setText(outString);
}
if(e.getActionCommand().equals(")")){
outString+=")";
string+=")";
text.setText(outString);
}
//EXP
if(e.getActionCommand().equals("Exp")){
outString+="Exp";
string+="*10^";
text.setText(outString);
}
//ln
if(e.getActionCommand().equals("ln")){
outString+="ln";
string+="l";
text.setText(outString);
}
//log
if(e.getActionCommand().equals("lg")){
outString+="lg";
string+="g";
text.setText(outString);
}
//x^y
if(e.getActionCommand().equals("x^y")){
outString+="^";
string+="^";
text.setText(outString);
}
//x^2
if(e.getActionCommand().equals("x^2")){
outString+="^2";
string+="^2";
text.setText(outString);
}
//x^3
if(e.getActionCommand().equals("x^3")){
outString+="^3";
string+="^3";
text.setText(outString);
}
//sin
if(e.getActionCommand().equals("sin")){
outString+="sin";
string+="s";
text.setText(outString);
}
//cos
if(e.getActionCommand().equals("cos")){
outString+="cos";
string+="c";
text.setText(outString);
}
//tan
if(e.getActionCommand().equals("tan")){
outString+="tan";
string+="t";
text.setText(outString);
}
//n!
if(e.getActionCommand().equals("n!")){
outString+="!";
string+="!";
text.setText(outString);
}
//1/x
if(e.getActionCommand().equals("1/x")){
outString+="1/";
string+="1/";
text.setText(outString);
}
if(e.getActionCommand().equals("=")){
if(!isCompute||isClear){
outString+="=";
text.setText(outString+(operate=new Operate()).result());
isCompute=true;
isClear=false;
}
else
text.setText(outString+(operate=new Operate()).result());
}
if(e.getActionCommand().equals("C")){
outString="";
string="";
text.setText(outString);
isClear=true;
}
if(e.getActionCommand().equals("CE")){
System.out.println(times);
if(times==0){
text.setText("Sorry,unimplement");
times++;
}
else if(times==1){
text.setText("I hava told you ,do not push again!");
times++;
}
else if(times==2){
text.setText("Shit ,it's the last warnning!!");
times++;
}
else if(times>=3){
text.setText("F**k you!!!");
times++;
}

}
if(e.getActionCommand().equals("BackSpace")){
if(string.length()>0){
outString=outString.substring(0,outString.length()-1);
string=string.substring(0,string.length()-1);
text.setText(outString);
}
}
if(e.getActionCommand().equals("+/-")){
if(isPositive){
outString="-"+outString;
string="0-"+string;
text.setText(outString);
isPositive=false;
}
else{
outString=outString.substring(1,outString.length());
string=string.substring(2,string.length());
text.setText(outString);
isPositive=true;
}
}

}
public class Operate{
StringTokenizer toknum=new StringTokenizer(string,"+-*/^sctgl!()",true);

String[] alls=new String[string.length()*2];
int i=-1;
String[] fits=null;
public Operate(){
while(toknum.hasMoreTokens()){
i++;
alls[i]=toknum.nextToken();
}

fits=new String[i+1];
System.arraycopy(alls,0,fits,0,fits.length);

}
public int level(String s){
if(s.equals("("))
return 6;
else if(s.equals("!"))
return 5;
else if(s.equals("^"))
return 4;
else if(s.equals("s")||s.equals("c")||s.equals("t")||s.equals("l")||s.equals("g"))
return 3;
else if(s.equals("*")||s.equals("/"))
return 2;
else if(s.equals("+")||s.equals("-"))
return 1;
else
return 0;
}
public String result(){
return outs(fits);
}
public String outs(String[] s){

int j=0;
boolean is6=false;
boolean is5=false;
boolean is4=false;
boolean is3=false;
boolean is2=false;
boolean is1=false;
for(j=0;j<s.length;j++){
if(level(s[j])==6){
is6=true;
break;
}
}
if(!is6){
for(j=0;j<s.length;j++){
if(level(s[j])==5){
is5=true;
break;
}
}
}
if((!is6)&&(!is5)){
for(j=0;j<s.length;j++){
if(level(s[j])==4){
is4=true;
break;
}
}
}
if((!is6)&&(!is5)&&(!is4)){
for(j=0;j<s.length;j++){
if(level(s[j])==3){
is3=true;
break;
}
}
}
if((!is6)&&(!is5)&&(!is4)&&(!is3)){
for(j=0;j<s.length;j++){
if(level(s[j])==2){
is2=true;
break;
}
}
}
if((!is6)&&(!is5)&&(!is4)&&(!is3)&&(!is2)){
for(j=0;j<s.length;j++){
if(level(s[j])==1){
is1=true;
break;
}
}
}

if(is6){
String[] temp1=new String[findIndexOfRight(s,j)-j-1];
System.arraycopy(s,j+1,temp1,0,temp1.length);
String[] temp2=new String[s.length-findIndexOfRight(s,j)+j];
System.arraycopy(s,0,temp2,0,j);
temp2[j]=outs(temp1).intern();
System.arraycopy(s,findIndexOfRight(s,j)+1,temp2,j+1,temp2.length-j-1);
//test
return outs(temp2);
}
else if(is5){
String temp1="";
temp1+=factorial(Integer.parseInt(s[j-1]));
if(s.length==2)
return temp1;
else{
String[] temp2=new String[s.length-1];
System.arraycopy(s,0,temp2,0,j-1);
temp2[j-1]=temp1.intern();
System.arraycopy(s,j+1,temp2,j,temp2.length-j);
return outs(temp2);
}
}
else if(is4){
String temp1="";
temp1+=Math.pow(Double.parseDouble(s[j-1]),Double.parseDouble(s[j+1]));
if(s.length==3)
return temp1;
else{
String[] temp2=new String[s.length-2];
System.arraycopy(s,0,temp2,0,j-1);
temp2[j-1]=temp1.intern();
System.arraycopy(s,j+2,temp2,j,temp2.length-j);
return outs(temp2);
}

}
else if(is3){
String temp1="";
if(isDegree){
if(s[j].equals("s"))
temp1+=Math.rint(Math.sin(Math.PI/180*Double.parseDouble(s[j+1]))*100000000)/100000000.0;
else if(s[j].equals("c"))
temp1+=Math.rint(Math.cos(Math.PI/180*Double.parseDouble(s[j+1]))*100000000)/100000000.0;
else if(s[j].equals("t"))
temp1+=Math.rint(Math.tan(Math.PI/180*Double.parseDouble(s[j+1]))*100000000)/100000000.0;
else if(s[j].equals("l"))
temp1+=Math.log(Double.parseDouble(s[j+1]));
else if(s[j].equals("g"))
temp1+=Math.log10(Double.parseDouble(s[j+1]));
}
else{
if(s[j].equals("s"))
temp1+=Math.rint(Math.sin(Double.parseDouble(s[j+1]))*100000000)/100000000;
else if(s[j].equals("c"))
temp1+=Math.rint(Math.cos(Double.parseDouble(s[j+1]))*100000000)/100000000;
else if(s[j].equals("t"))
temp1+=Math.rint(Math.tan(Double.parseDouble(s[j+1]))*100000000)/100000000;
else if(s[j].equals("l"))
temp1+=Math.log(Double.parseDouble(s[j+1]));
else if(s[j].equals("g"))
temp1+=Math.log10(Double.parseDouble(s[j+1]));
}
if(s.length==2)
return temp1;
else{
String[] temp2=new String[s.length-1];
System.arraycopy(s,0,temp2,0,j);
temp2[j]=temp1.intern();
System.arraycopy(s,j+2,temp2,j+1,temp2.length-j-1);
return outs(temp2);
}
}
else if(is2){
String temp1="";
if(s[j].equals("*"))
temp1+=(Double.parseDouble(s[j-1])*Double.parseDouble(s[j+1]));
else if(s[j].equals("/"))
temp1+=(Double.parseDouble(s[j-1])/Double.parseDouble(s[j+1]));
if(s.length==3)
return temp1;
else{
String[] temp2=new String[s.length-2];
System.arraycopy(s,0,temp2,0,j-1);
temp2[j-1]=temp1.intern();
System.arraycopy(s,j+2,temp2,j,temp2.length-j);
return outs(temp2);
}
}
else{
String temp1="";
if(s[j].equals("+"))
temp1+=(Double.parseDouble(s[j-1])+Double.parseDouble(s[j+1]));
else if(s[j].equals("-"))
temp1+=(Double.parseDouble(s[j-1])-Double.parseDouble(s[j+1]));
if(s.length==3)
return temp1;
else{
String[] temp2=new String[s.length-2];
System.arraycopy(s,0,temp2,0,j-1);
temp2[j-1]=temp1.intern();
System.arraycopy(s,j+2,temp2,j,temp2.length-j);
return outs(temp2);
}
}

}
public int findIndexOfRight(String[] s,int left){
int l=0;
int r=0;
int index=0;
for(int p=left;p<s.length;p++){
if(s[p].equals("(")){
l++;
r=l;
}
else if(s[p].equals(")")){
r--;
if(r==0)
index=p;
}
}
return index;
}
public int factorial(int n){
if(n==0)
return 1;
else
return n*factorial(n-1);
}
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-04-28
public int add(int a,int b)
{
return a+b;
}
第2个回答  2008-04-28
你要有图形界面的计算器还是实现加法的java程序啊?要是后者,一楼的就可以了,不够健全,只能算整数和整数之间的加法,要是还要计算带小数的,可以重载这个方法。
相似回答
大家正在搜