您的位置:首页 > 移动开发 > 微信开发

计算器小程序-Java原创

2009-11-20 18:56 260 查看
学习Java有一段时间了,为了练练手,写了个简单的计算器程序,代码如下:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class CalculatorJFrame extends JFrame implements ActionListener
{
private JButton btn_sqrt,btn_sign,btn_ce,btn_c,
btn_7,btn_8,btn_9,btn_div,
btn_4,btn_5,btn_6,btn_mul,
btn_1,btn_2,btn_3,btn_sub,
btn_0,btn_dot,btn_equal,btn_plus;
private JTextField text;	//显示结果的文本框。
private Panel pn;			//放置按钮的面板。
private double r;			//r保存计算结果。
private int flag=1;			//flag==1表示正在输入第一个数,flag==2表示正在输入第二个数。
private String s,s1,s2;		//s保存操作符,s1和s2保存两个操作数。

//初始化窗口:
public CalculatorJFrame()
{
super("计算器");
this.setSize(251,220);
this.setLocation(300,150);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setResizable(false);
this.setLayout(new BorderLayout(5,5));

text=new JTextField("0.");
text.setHorizontalAlignment(JTextField.RIGHT);
text.setEditable(false);
text.setBackground(Color.white);
this.add(text,"North");

pn=new Panel(new GridLayout(5,4,2,2));
this.add(pn);

//添加按钮:
btn_sqrt=addButton("sqrt");
btn_sign=addButton("-/+");
btn_ce=addButton("CE");
btn_c=addButton("C");
btn_7=addButton("7");
btn_8=addButton("8");
btn_9=addButton("9");
btn_div=addButton("/");
btn_4=addButton("4");
btn_5=addButton("5");
btn_6=addButton("6");
btn_mul=addButton("x");
btn_1=addButton("1");
btn_2=addButton("2");
btn_3=addButton("3");
btn_sub=addButton("-");
btn_0=addButton("0");
btn_dot=addButton(".");
btn_equal=addButton("=");
btn_plus=addButton("+");

this.setVisible(true);

s1=new String("");
s2=new String("");
s=new String("");

}

//添加按钮的函数:
private JButton addButton(String label)
{
JButton button=new JButton(label);
pn.add(button);
button.addActionListener(this);
return button;
}

//单击按钮响应:
public void actionPerformed(ActionEvent e)
{
JButton b=(JButton)e.getSource();
boolean digit=(b==btn_dot||b==btn_0||b==btn_1||b==btn_2||b==btn_3||b==btn_4 	//事件源为数字或小数点按钮,则digit==true。
||b==btn_5||b==btn_6||b==btn_7||b==btn_8||b==btn_9);
boolean sign=(b==btn_mul||b==btn_div||b==btn_sub||b==btn_plus||b==btn_equal);	//事件源为为加、减、乘、除、等号按钮,则sign=true。

//事件源为数字或小数点按钮:
if(digit)
{
if(s.equals("="))//如果之前输入的是等号,则清空所有操作数重新开始计算。
{
flag=1;
s1=s2="";
s="";
}
if(flag==1)//输入第一个操作数,存入字符串s1。
{
s1=s1+b.getText();
text.setText(s1);
}
if(flag==2)//输入第二个操作数,存入字符串s2。
{
s2=s2+b.getText();
text.setText(s2);
}
}

//事件源为加、减、乘、除、等号按钮:
if(sign)
{
if(s2.equals("")&&!s1.equals(""))//完成第一个操作数的输入时,flag变为2。
{
flag=2;
}

if(!s2.equals(""))//完成第二个操作数的输入时,计算结果。
{
try
{
this.result();//计算结果并存入变量r。
text.setText(""+r);//显示结果。
s1=""+r;//将结果作为第一个操作数继续进行下一步运算。
s2="";//清空第二个操作数。
}

catch(NumberFormatException nfe)
{
text.setText(nfe.getMessage()+",请重新输入!");
flag=1;
s1="";s2="";s="";
}
}
s=b.getText();//得到操作符,存入变量s
}

if(b==btn_ce)//按下CE按钮清空当前输入的操作数。
{
if(!s2.equals(""))//如果已经输入两个操作数,则清空第二个,并在文本框text中显示第一个操作数作为当前操作数。
{
text.setText(s1);
s2="";
}
else		//如果只输入了一个操作数,则清空第一个。
{
text.setText("0.");
s1="";
}
}

if(b==btn_c)//按下C按钮清空所有操作数。
{
flag=1;
text.setText("0.");
s1="";
s2="";
s="";
}

if(b==btn_sqrt&&!text.getText().equals("0."))
{
try
{
double d=Math.sqrt(Double.parseDouble(text.getText()));
if(!s2.equals(""))s2=""+d;
else s1=""+d;
text.setText(""+d);
}
catch(NumberFormatException nfe)
{
text.setText(nfe.getMessage()+"请重新输入!");
s1=s2=s="";
flag=1;
}
}

if(b==btn_sign)//按下“-/+按钮”。
{
if(!s2.equals(""))//已经输入了两个操作数,则对第二个进行符号改变。
{
if(s2.charAt(0)=='-')//如果为负数,单击“-/+”按钮后则变为正数。
s2=s2.substring(1);
else				//如果为正数,单击“-/+”按钮后则变为负数。
s2="-"+s2;
text.setText(s2);
}
if(s2.equals("")&&!s1.equals(""))//对第一个数进行符号改变。
{
if(s1.charAt(0)=='-')
s1=s1.substring(1);
else
s1="-"+s1;
text.setText(s1);
}

}

}//actionPerformed end.

//计算结果的函数:
public void result()throws NumberFormatException
{
double d1=Double.parseDouble(s1);
double d2=Double.parseDouble(s2);
char c=s.charAt(0);			//得到操作符。
switch(c)
{
case 'x' : r=d1*d2;break;
case '/' : r=d1/d2;break;
case '+' : r=d1+d2;break;
case '-' : r=d1-d2;break;
}

}

//主函数:
public static void main(String args[])
{
new CalculatorJFrame();
}

}


运行结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: