JAVA计算器(有无限加括号功能)+string与double互相转化

本文介绍了作者完成的一个Java计算器项目,具备处理括号、负数、乘除优先级等功能,核心算法处理字符串计算逻辑,约600行代码。计算器能够自动检查输入合法性,支持鼠标点击和键盘输入,但不支持跳跃修改。作者在实现过程中,原本自定义了string到double和double到string的转换函数,后来发现Java已有内置方法,感到懊恼。文章分享了内置转换方法的使用,并提供了代码片段。
摘要由CSDN通过智能技术生成

java老师布置的作业,要我们编个计算器,而且要有括号功能。。。编的恶心哪,600多行代码,调试来调试去终于能用了,但是估计还有bug。

有一个bug我自己知道,但是不影响正常使用:可以存在前导零,就是说可以有0087这种数字,计算器会认为这就是87,。

下面是两个截图,左边是输入,右边是输出。


这个计算器的核心算法就是对左边的字符串进行处理,得出右边的结果,其中要考虑到括号匹配、负号、乘除优先级等等问题,这一个算法写了200行。

因为字符串比较短,最多就几十,所以我的算法比较暴力,没有考虑时间和空间复杂度,大量地对字符串进行遍历(不符合我这样一个ACMer严谨治学的精神啊。。。其实是因为有点懒)。

除此之外,计算器还能自动识别输入内容的合法性,如果不合法,你是输入不进去某些符号的

for example:如果你已经输入了8+9,此时你再按’)‘或者’(‘,计算器会没反应,你只有再写个’+‘或者把’9‘去掉才能输入’(‘。这个功能我是在输入的时候把每个位置的东西记录在了一个F[][]二维数组里,每次输入一个键,判断一下。

另比如你当前的式子不构成一个完整的表达式,按回车或者’=‘是无效的,你可以按’Backspace‘回去一点点修改,但是不支持跳着改,只能改上一个(本人能力和精力实在有限,要是加上跳着改,还要把左右箭头加进去,太麻烦)。

这个计算器支持鼠标点按钮和键盘输入,按’=‘或者’回车‘可以出结果,按’c‘可以清零。

还有一个让我要抓狂的事情!!!!因为是初学者,不咋会java,一开始还不知道字符串和double之间相互转化的算法系统早就给弄好了,我还自己编了change_to_double()和change_to_string()两个函数,写了几百行代码,调试这俩函数调了半天也没弄好,然后我知道可以用系统现成的函数的时候,简直要崩溃。。。

下面是double和string互相转化的实现方式。

string转double:

double a;

string ls="1.23"

a=Double.parseDouble(ls);

然后a就变成了double型的1.23。


double转string:两种方法(不知道区别是啥,都能用把)

方法1:直接在s后面+a(我觉得这个写起来简单)

String s="";

double a=1.23

s=s+a;

方法2:用String.valueOf(double);

String s="";

double a=1.23;

s==s.valueOf(a);


下面是我实现的代码。有些地方有注释。


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

public class Calculator extends JFrame {
	static char A[]={'0','1','2','3','4','5','6','7','8','9'};
//	static double k[]={0.1,0.001,0.0001,0.00001,0.000001,0.0000001};//什么破java软件,这个东西放到别的地方都报错

	private JTextField textField1;
	private JButton b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,
	BACK,C,jia,jian,cheng,chu,deng,dian,zuok,youk;
	public Calculator(){
		super("计算器");
		Container container=getContentPane();
//		container.setLayout(new FlowLayout());
		container.setLayout(null);
		
		//文本框
		textField1=new JTextField("");
		textField1=new JTextField(35);
		textField1.setBounds(20, 20, 290, 30);
		container.add(textField1);
		
		
		//各种按钮
		
		BACK=new JButton("Backspace");
		BACK.setBounds(20, 60, 110, 40);
		container.add(BACK);
		C=new JButton("C");
		C.setBounds(140, 60, 50, 40);
		container.add(C);
		zuok=new JButton("(");
		zuok.setBounds(200, 60, 50, 40);
		container.add(zuok);
		youk=new JButton(")");
		youk.setBounds(260, 60, 50, 40);
		container.add(youk);
		jia=new JButton("+");
		jia.setBounds(200, 110, 50, 40);
		container.add(jia);
		jian=new JButton("-");
		jian.setBounds(260, 110, 50, 40);
		container.add(jian);
		cheng=new JButton("*");
		cheng.setBounds(200, 160, 50, 40);
		container.add(cheng);
		chu=new JButton("/");
		chu.setBounds(260, 160, 50, 40);
		container.add(chu);
		dian=new JButton(".");
		dian.setBounds(140, 260, 50, 40);
		container.add(dian);
		deng=new JButton("=");
		deng.setBounds(200, 210, 110, 90);
		container.add(deng);
		b0=new JButton("0");
		b0.setBounds(20, 260, 110, 40);
		container.add(b0);
		b1=new JButton("1");
		b1.setBounds(20, 210, 50, 40);
     	container.add(b1);
		b2=new JButton("
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值