简单的Java计算器示例

概要:这是一个简单的Java计算器示例

本计算器代码均未参考和复制任何现成的源代码,所有代码均为本超级菜鸟历经通宵所写。以下代码原本是为实现加、减、乘、除连 续运算以及按优先级运算所设计。目前成功实现了不同运算混合连续运算, 而若要实现按加、减、乘、除的优先级运算,只需增添少量代码即可。本人 对JAVA的学习水平不高,代码混乱,算法复杂、啰嗦,望各位见谅!

简单介绍

为了操作方便起见,本次编程在eclipse应用程序内进行:

  1. 导入相关Java类包
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
  1. 添加GUI组件与相关布局(部分代码示例如下):
   JButton button;
   JButton buttonzero=new JButton("0");
   JButton surebutton=new JButton("清除");
   JButton buttonend=new JButton("=");
   JButton buttonadd=new JButton("+");
   JButton buttoncut=new JButton("-");
   JButton buttonmul=new JButton("×");
   JButton buttonmod=new JButton("÷");
   JTextField text=new JTextField();
  1. 为相关组件设置监听(部分代码示例如下):
     for(int i=1;i<=9;i++){
   		String buttons=String.valueOf(i);
   		button=new JButton(buttons);
   		button.addActionListener(this);
   		panel1.add(button);
   	}
   	buttonzero.addActionListener(this);
   	panel1.add(buttonzero);
   	buttonadd.addActionListener(this);
   	panel1.add(buttonadd);
   	buttoncut.addActionListener(this);
   	panel1.add(buttoncut);
   	buttonmul.addActionListener(this);
   	panel1.add(buttonmul);
   	buttonmod.addActionListener(this);
   	panel1.add(buttonmod);
   	buttonend.addActionListener(this);
   	panel1.add(buttonend);
  1. 简易计算功能的实现(部分代码示例如下):
   public void calculate(String s,Double num,Double save,boolean flag){
   	 if(flag){
   		result=num;
   		flag=false;
   	 }
   	 if(!flag){
   	   if(s.equals("+")){
   	    result+=save;
   	    text.setText(""+result);
   	    System.out.println(result);
   	   }
   	   if(s.equals("-")){
   	    result-=save;
   	    System.out.println(result);
   	    text.setText(""+result);
   	   }
   	   if(s.equals("×")){
   	     result*=save;
   	     text.setText(""+result);
   	     System.out.println(result);
   	   }
   	   if(s.equals("÷")){
   	        if(save==0.0){String msg=String.format("错误,分母为零!"); JOptionPane.showMessageDialog(this, msg);}
   		    else{
   		        result/=save;
   		  	    System.out.println(result);
   		    }
   	   }
   	   if(s.equals("=")){
   		   text.setText(""+result);
   	   }
   	 }	
   }    

效果图片

运算图片
简易计算器效果图
在这里插入图片描述

在这里插入图片描述

所有代码

以下是上Java只有12次课菜鸟的悲哀

//                         代码说明                              //
//     本人郑重声明:本计算器代码均未参考和复制任何现成的源代码,     //
//所有代码均为本人历经通宵所写。以下代码原本是为实现加、减、乘、除连  //
//续运算以及按优先级运算所设计。目前成功实现了不同运算混合连续运算,  //
//而若要实现按加、减、乘、除的优先级运算,只需增添少量代码即可。本人  //
//对JAVA的学习水平不高,代码较为混乱,算法较为复杂、啰嗦,望各位谅解!//

package 上机实验2;          //代码文件所在包名

//--代码运行时,可能输出报错信息,但不会影响计算器功能的实现。--//

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

class CalculateWin extends JFrame implements ActionListener{
	String str="";
	String nu="";
	int i=0;
	boolean flag=true;
	Double before[];
	String array1[];
	String array[];
	Double store=0.0;
	Double save=0.0;
	Double value=null,num=0.0,result=0.0;
	JButton button;
	JButton buttonzero=new JButton("0");
	JButton surebutton=new JButton("清除");
	JButton buttonend=new JButton("=");
	JButton buttonadd=new JButton("+");
	JButton buttoncut=new JButton("-");
	JButton buttonmul=new JButton("×");
	JButton buttonmod=new JButton("÷");
	JTextField text=new JTextField();
	
	CalculateWin(){
		init("便捷计算器");
		setLocation(500,200);
		setSize(400,400);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
	}
    void init(String s){
		setTitle(s);
		JPanel panel1=new JPanel();
		panel1.setSize(800,100);
		for(int i=1;i<=9;i++){
			String buttons=String.valueOf(i);
			button=new JButton(buttons);
			button.addActionListener(this);
			panel1.add(button);
		}
		buttonzero.addActionListener(this);
		panel1.add(buttonzero);
		buttonadd.addActionListener(this);
		panel1.add(buttonadd);
		buttoncut.addActionListener(this);
		panel1.add(buttoncut);
		buttonmul.addActionListener(this);
		panel1.add(buttonmul);
		buttonmod.addActionListener(this);
		panel1.add(buttonmod);
		buttonend.addActionListener(this);
		panel1.add(buttonend);
		buttonend.setBackground(Color.red);
		buttonend.setForeground(Color.white);
		GridLayout grid=new GridLayout(5,3,5,5);
		GridLayout grid2=new GridLayout(1,2,5,5);
		panel1.setLayout(grid);
		add(panel1,BorderLayout.CENTER);
		JPanel panel2=new JPanel();	
		text.setColumns(10);
		panel2.add(text);
		surebutton=new JButton("清除");
		surebutton.addActionListener(this);
		surebutton.setBackground(Color.pink);
		panel2.add(surebutton);
		panel2.setLayout(grid2);
		add(panel2,BorderLayout.NORTH);
		text.addActionListener(this);
	}
    public String clean(String s){
    	s="";
    	return s;
    }
    public void calculate(String s,Double num,Double save,boolean flag){
    	 if(flag){
    		result=num;
    		flag=false;
    	 }
    	 if(!flag){
    	   if(s.equals("+")){
    	    result+=save;
    	    text.setText(""+result);
    	    System.out.println(result);
    	   }
    	   if(s.equals("-")){
    	    result-=save;
    	    System.out.println(result);
    	    text.setText(""+result);
    	   }
    	   if(s.equals("×")){
    	     result*=save;
    	     text.setText(""+result);
    	     System.out.println(result);
    	   }
    	   if(s.equals("÷")){
    	        if(save==0.0){String msg=String.format("错误,分母为零!"); JOptionPane.showMessageDialog(this, msg);}
    		    else{
    		        result/=save;
    		  	    System.out.println(result);
    		    }
    	   }
    	   if(s.equals("=")){
    		   text.setText(""+result);
    	   }
    	 }	
    }    
	public void actionPerformed(ActionEvent e){
		if(!e.getActionCommand().equals("清除")  ){
		  str=str+e.getActionCommand();
		  if(str.equals("+") || str.equals("-") || str.equals("×") || str.equals("÷") || str.equals("=")){String msg=String.format("运算数字不合法!请清空重新输入!"); JOptionPane.showMessageDialog(this, msg);}
		  text.setText(str);                                                //在文本框输出监听到的除"清除"以外的所有按钮标签
		  array=str.split("[^\\d]");                                        //数组array用于存储运算数字
		  save=Double.parseDouble(array[array.length-1]);                   //save为最后一个数
		  num=Double.parseDouble(array[0]);                                 //num为第一个数
		  array1=str.split("[\\d]");                                        //数组array1用于存储运算符
		}
		if(e.getActionCommand().equals("清除")){str=clean(str);text.setText(str);num=0.0;value=null;flag=true;array=null;array1=null;result=0.0;}
		if(num==save && array==null && array1==null){                       //如果只输入一个数,就不做运算
			if(e.getActionCommand().equals("="))text.setText(""+Double.parseDouble(array[0]));
		}
		else if(!(num==save || array==null || array1==null)){               //不写会报错--点击清除会报错:说什么空指针
		 int k=0;
		 for(int j=0;j<=array1.length-1 && k+1<=array.length-1;++j){        //遍历array1中存储的运算符
		   while(array1[j].length()<=0)j+=1;                                //跳过array1得到的str用数字分割后的空字符
		   if(e.getActionCommand().equals("=") && k+1<=array.length-1){     //如果监听到了"=",执行计算
			  String store=array1[j];
			  calculate(store,Double.parseDouble(array[0]),Double.parseDouble(array[k+1]),flag);       //运算
			  k=k+1;                                                                                  //以遍历array存储的所有数字
			  if(e.getActionCommand().equals("="))text.setText(""+result);
			  flag=false;                                                                             //解决对result第一次赋值问题
		   }
		   if(e.getActionCommand().equals("="))text.setText(""+result);
		 }
		}
	}
}

public class task2 {
	public static void main(String args[]){
		CalculateWin calculatewin=new CalculateWin();
	}
}

结语

代码虽烂,但含本人心血,未经本人允许,禁止转载或复制。希望这篇博客能够帮到您,如果不喜欢,望大佬海涵,请勿喷本超级菜鸟,谢谢!

  • 10
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梧桐※漂湘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值