java计算器代码,java实现简单计算器
老铁们,大家好,相信还有很多朋友对于java计算器代码和java实现简单计算器的相关问题不太懂,没关系,今天就由我来为大家分享分享java计算器代码以及java实现简单计算器的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
java如何编写计算器代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator extends JFrame implements ActionListener
{
private boolean dotExist, operated, equaled;//帮助运算的布尔变量
private double storedNumber;//目前的结果
private char lastOperator;//表示上一运算符
private JTextField operation;//结果栏
private JButton dot, plus, minus, multi, div, sqrt, equal, changePN, clear;//运算符
private JButton[] numbers;//数字
//构造者
public Calculator()
{
setTitle("Calculator");
//初始化变量
dotExist= false;//表示当前的数是否有小数点
operated= false;//表示任意运算符是否被按下
equaled= false;//表示等号是否被按下
storedNumber= 0;
lastOperator='?';
//初始化窗口变量
operation= new JTextField("0");
operation.setEditable(false);
numbers= new JButton[10];
for(int i= 0; i< 10; i++)
numbers[i]= new JButton(""+ i);
dot= new JButton(".");
plus= new JButton("+");
minus= new JButton("-");
multi= new JButton("*");
div= new JButton("/");
sqrt= new JButton("√");
equal= new JButton("=");
changePN= new JButton("±");
clear= new JButton("AC");
//将窗口物体放入窗口
GridBagLayout layout= new GridBagLayout();
getContentPane().setLayout(layout);
addComponent(layout, operation, 0, 0, 4, 1);
addComponent(layout, numbers[1], 1, 0, 1, 1);
addComponent(layout, numbers[2], 1, 1, 1, 1);
addComponent(layout, numbers[3], 1, 2, 1, 1);
addComponent(layout, numbers[4], 2, 0, 1, 1);
addComponent(layout, numbers[5], 2, 1, 1, 1);
addComponent(layout, numbers[6], 2, 2, 1, 1);
addComponent(layout, numbers[7], 3, 0, 1, 1);
addComponent(layout, numbers[8], 3, 1, 1, 1);
addComponent(layout, numbers[9], 3, 2, 1, 1);
addComponent(layout, dot, 4, 0, 1, 1);
addComponent(layout, numbers[0], 4, 1, 1, 1);
addComponent(layout, sqrt, 4, 2, 1, 1);
addComponent(layout, plus, 1, 3, 1, 1);
addComponent(layout, minus, 2, 3, 1, 1);
addComponent(layout, multi, 3, 3, 1, 1);
addComponent(layout, div, 4, 3, 1, 1);
addComponent(layout, equal, 5, 0, 2, 1);
addComponent(layout, changePN, 5, 2, 1, 1);
addComponent(layout, clear, 5, 3, 1, 1);
}
//对按钮进行反应的方法
public void actionPerformed(ActionEvent e)
{
JButton btn=(JButton)e.getSource();
if(btn== clear)
{
operation.setText("0");
dotExist= false;
storedNumber= 0;
lastOperator='?';
}
else if(btn== equal)
{
operate('=');
equaled= true;
}
else if(btn== plus)
{
operate('+');
equaled= false;
}
else if(btn== minus)
{
operate('-');
equaled= false;
}
else if(btn== multi)
{
operate('*');
equaled= false;
}
else if(btn== div)
{
operate('/');
equaled= false;
}
else if(btn== changePN)
{
operate('p');
operate('=');
equaled= true;
}
else if(btn== sqrt)
{
operate('s');
operate('=');
equaled= true;
}
else
{
if(equaled)
storedNumber= 0;
for(int i= 0; i< 10; i++)
if(btn== numbers[i])
{
if(operation.getText().equals("0"))
operation.setText(""+ i);
else if(! operated)
operation.setText(operation.getText()+ i);
else
{
operation.setText(""+ i);
operated= false;
}
}
if(btn== dot&&! dotExist)
{
operation.setText(operation.getText()+".");
dotExist= true;
}
}
}
//进行运算的方法
private void operate(char operator)
{
double currentNumber= Double.valueOf(operation.getText()).doubleValue();
if(lastOperator=='?')
storedNumber= currentNumber;
else if(lastOperator=='+')
storedNumber+= currentNumber;
else if(lastOperator=='-')
storedNumber-= currentNumber;
else if(lastOperator=='*')
storedNumber*= currentNumber;
else if(lastOperator=='/')
storedNumber/= currentNumber;
else if(lastOperator=='p')
storedNumber*=-1;
else if(lastOperator=='s')
storedNumber= Math.sqrt(currentNumber);
else if(lastOperator=='='&& equaled)
storedNumber= currentNumber;
operation.setText(""+ storedNumber);
operated= true;
lastOperator= operator;
}
//快捷使用GridBagLayout的方法
private void addComponent(GridBagLayout layout, Component component, int row, int col, int width, int height)
{
GridBagConstraints constraints= new GridBagConstraints();
constraints.fill= GridBagConstraints.BOTH;
constraints.insets= new Insets(10, 2, 10, 2);
constraints.weightx= 100;
constraints.weighty= 100;
constraints.gridx= col;
constraints.gridy= row;
constraints.gridwidth= width;
constraints.gridheight= height;
layout.setConstraints(component, constraints);
if(component instanceof JButton)
((JButton)component).addActionListener(this);
getContentPane().add(component);
}
//主方法初始化并显示窗口
public static void main(String[] args)
{
Calculator calc= new Calculator();
calc.setSize(290, 400);
calc.setVisible(true);
}
}
如果你想加sin cos tan的话就建它们的按钮在actionPerformed方法中的if-else语句中加else if(btn== sin){operate('S');operate('=');equaled= true;}然后在operate方法加对应的语句就行了.记忆M+, M-没时间搞这个应该比较简单容易明白吧.
JAVA简单咋做,计算器代码
简单写了下,代码如下请参照:
/**
*计算器类
*
*@authorAdministrator
*
*/
publicclassCalculatorextendsJFrameimplementsActionListener{
privatestaticfinallongserialVersionUID=3868243398506940702L;
//文本框
privateJTextFieldresult;
//按钮数组
privateJButton[]buttons;
//按钮文本
privatefinalString[]characters={"7","8","9","/","4","5","6",
"*","1","2","3","-","0",".","=","+"};
//是否为第一个输入的数字
privatebooleanisFirstDigit=true;
//运算结果
privatedoubleresultNum=0.0;
//运算符
privateStringoperator="=";
publicCalculator(Stringtitle){
//设置标题栏
super(title);
//初始化各组件
init();
//注册各组件监听器
registerListener();
//显示窗体
setVisible(true);
}
/**
*初始化各组件
*/
privatevoidinit(){
//常用属性初始化
setSize(220,200);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
/*文本框对象初始化*/
result=newJTextField("0");
//文本右对齐
result.setHorizontalAlignment(JTextField.RIGHT);
//设置是否可编辑
result.setEditable(false);
/*按钮初始化*/
buttons=newJButton[characters.length];
for(inti=0;i<buttons.length;i++){
buttons[i]=newJButton(characters[i]);
buttons[i].setFocusable(false);//不允许按钮定位焦点
}
/*将文本框与按钮添加到窗体中*/
add(result,BorderLayout.NORTH);
JPanelpnl=newJPanel(newGridLayout(4,4,5,5));
for(JButtonjButton:buttons){
pnl.add(jButton);
}
add(pnl);
this.getContentPane().setFocusable(true);
}
/**
*注册监听器
*/
privatevoidregisterListener(){
for(JButtonjButton:buttons){
jButton.addActionListener(this);
}
//注册键盘事件
this.getContentPane().addKeyListener(newKeyAdapter(){
@Override
publicvoidkeyPressed(KeyEvente){
Stringtext=String.valueOf(e.getKeyChar());
if(Character.isDigit(text.charAt(0))||".".equals(text)){//数字或小数点
handleNumber(text);
}elseif("+-*/=".indexOf(text)!=-1){//运算符
handleOperator(text);
}elseif(e.getKeyCode()==8){//退格键
Stringtmp=result.getText().trim();
if(tmp.length()==1){
result.setText("0");
isFirstDigit=true;
}else{
result.setText(tmp.substring(0,tmp.length()-1));
}
}
}
});
}
@Override
publicvoidactionPerformed(ActionEvente){
JButtonbtn=(JButton)e.getSource();
Stringtext=btn.getText().trim();
if(Character.isDigit(text.charAt(0))||".".equals(text)){//处理数字和小数点
handleNumber(text);
}else{//处理运算符
handleOperator(text);
}
}
/**
*处理数字和小数点
*
*@paramtext
*/
privatevoidhandleNumber(Stringtext){
if(isFirstDigit){//第一次输入
if(".".equals(text)){
this.result.setText("0.");
}else{
this.result.setText(text);
}
}elseif("0".equals(text)&&"0".equals(this.result.getText())){
isFirstDigit=true;
return;
}elseif(".".equals(text)&&this.result.getText().indexOf(".")==-1){
this.result.setText(this.result.getText()+".");
}elseif(!".".equals(text)){
this.result.setText(this.result.getText()+text);
}
isFirstDigit=false;
}
/**
*处理运算符
*
*@paramtext
*/
privatevoidhandleOperator(Stringtext){
switch(operator){//处理各项运算适用于JDK1.7版本的
case"+":
resultNum+=Double.parseDouble(this.result.getText());
break;
case"-":
resultNum-=Double.parseDouble(this.result.getText());
break;
case"*":
resultNum*=Double.parseDouble(this.result.getText());
break;
case"/":
resultNum/=Double.parseDouble(this.result.getText());
break;
case"=":
resultNum=Double.parseDouble(this.result.getText());
break;
}
//将文本框的值修改为运算结果
this.result.setText(String.valueOf(resultNum));
//将点击的运算符放入operator保存
operator=text;
//下一个数字第一次点击
isFirstDigit=true;
}
publicstaticvoidmain(String[]args){
newCalculator("MyCalculator");
}
}运行结果如下:
求JAVA计算器源代码!!!
class Calculator extends WindowAdapter implements ActionListener//创建Calculator类,实现ActionListener接口.
{
//result代表上一次运算结果;data1代表当前文本框内显示的数,radixPointDepth代表小数位数
private double result=0,data1=0,radixPointDepth=3;
//resultIndicate代表是否敲击了等号,要求结果
//radixPointIndicate代表是否敲击了小数点
private boolean radixPointIndicate=false,resultIndicate=false;
private char prec='+';//代表当前运算符
private JFrame f;//创建窗口
private TextField tf;//创建文本框,用于存放结果
private Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17;//创建按钮
private Panel p;//创建/面板容器
public void init()
{
f=new JFrame("计算器");
p=new Panel();//运算界面p
p.setLayout(new GridLayout(4,4));//设置p的布局为GridLayout,四行四列
tf=new TextField(30);
//实例化按钮
b1=new Button("7");
b2=new Button("8");
b3=new Button("9");
b4=new Button("+");
b5=new Button("4");
b6=new Button("5");
b7=new Button("6");
b8=new Button("-");
b9=new Button("1");
b10=new Button("2");
b11=new Button("3");
b12=new Button("*");
b13=new Button("0");
b14=new Button(".");
b15=new Button("=");
b16=new Button("/");
b17=new Button("清零");
f.add(tf,"North");//把文本区域添加到框架的上方
f.add(p,"Center");//把面版添加到框架的中间
f.add(b17,"South");//把按钮(清零)添加到框架的下方
//把按钮添加到面版上
p.add(b1);
p.add(b2);
p.add(b3);
p.add(b4);
p.add(b5);
p.add(b6);
p.add(b7);
p.add(b8);
p.add(b9);
p.add(b10);
p.add(b11);
p.add(b12);
p.add(b13);
p.add(b14);
p.add(b15);
p.add(b16);
//为按钮添加监听
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b10.addActionListener(this);
b11.addActionListener(this);
b12.addActionListener(this);
b13.addActionListener(this);
b14.addActionListener(this);
b15.addActionListener(this);
b16.addActionListener(this);
b17.addActionListener(this);
f.addWindowListener(this);//为框架添加监听
f.setSize(300,190);//设置框架的大小
f.setVisible(true);//设置框架为可见
}
//监听程序,监听actionEvent事件
public void actionPerformed(ActionEvent e)
{
String s;
s=e.getActionCommand();//s存放敲击的命令字符串
//SWITCH开关
switch(s.charAt(0))
{
case'0':
case'1':
case'2':
case'3':
case'4':
case'5':
case'6':
case'7':
case'8':
case'9'://按了“0-9”,就执行下面
if(resultIndicate)//如果敲过等号,直接敲数字,则代表一个新运算开始了,所有内容初始化
{
result=0;
data1=0;
prec='+';
}
Integer Int1=new Integer(s);
if(radixPointIndicate)//如果敲击过小数点
{
radixPointDepth=radixPointDepth/10;
data1=data1+(Int1.intValue())*radixPointDepth;
}
else
{
data1=data1*10+(Int1.intValue());
}
Double displayNumber=new Double(data1);
tf.setText(displayNumber.toString());
resultIndicate=false;//只要敲击了数字键,就代表新的结果还没有算出来,所以为false
break;
case'+':
case'-':
case'*':
case'/':
case'='://按了“+、-、*、/”,执行下面
if(s.charAt(0)!='='&&resultIndicate)
//如果敲击+、-、*、/,并且已经计算过结果,则取新的操作符,所以为false;代表连续运算
//prec存放新敲击的运算符
{
prec=s.charAt(0);
resultIndicate=false;
}
else
{
//用SWITCH开关运算出执行了“+、-、*、/”的结果
switch(prec)
{
case'+':
result=result+data1;
break;
case'-':
result=result-data1;
break;
case'*':
result=result*data1;
break;
case'/':
result=result/data1;
break;
}
}
radixPointIndicate=false;//如果敲击运算符或者=,则认为一个运算数的终结;所以小数点要清空
radixPointDepth=1;
displayNumber=new Double(result);//将最新的计算结果显示在文本框内
tf.setText(displayNumber.toString());
//监听是否按了“=”
if(s.charAt(0)!='=')//如果没有敲等号,则敲了+、-、*、/,那么data1清空
{
data1=0;
prec=s.charAt(0);
}
else
{
resultIndicate=true;//resultIndicate只有当敲击了等号,才为true,否则为false
}
break;
case'.':
radixPointIndicate=true;
break;
}
//监听是否按了为“清零”,是则对各数据清零
if(s.equals("清零"))
{
result=0;
data1=0;
radixPointDepth=1;
tf.setText("");
}
}
好了,文章到此结束,希望可以帮助到大家。