在java中评估数学表达式

时间:2013-09-14 02:29:36

标签: java arrays math char calculator

我正在尝试在业余时间学习java。到目前为止,我喜欢它。我目前正在研究一个简单的4功能计算器的更高级版本。本质上我想输入一个表达式,比如“4 + 5”,然后将它分成第一个术语,第二个术语和一个运算符,然后根据检测到的运算符符号计算答案并输出答案。我的问题是我将表达式存储在char数组中并且工作正常,除非第一个术语是两位数字,或者用户在另一个运算符中添加。如何保持这种动态足以允许多种形式的简单表达式?

2 个答案:

答案 0 :(得分:1)

我尝试使用StringTokenizer类。

将输入捕获为字符串,然后像这样生成StringTokenizer:

String delimiter =" ";
StringTokenizer st = new StringTokenizer(inputString, delimiter);

分隔符是字符串中有趣的部分之间的字符串,因此您可以将其设置为空格。

之后,您可以通过调用nextToken方法提取部分输入。

例如:

String firstTerm=st.nextToken();
String operator=st.nextToken();
String secondTerm=st.nextToken();

double ft=Double.parseDouble(firstTerm);
double st=Double.parseDouble(secondTerm);

然后,您可以根据输入操作符使用例如switch语句来决定要执行哪个操作。

您可能需要在此处执行一些异常处理,因为StringTokenizer可能会抛出异常。

如果您愿意,可以保持较低的水平并手动完成所有这些操作。只需创建一个字符串,然后逐个字符地读取字符数组,直到找到分隔符。你可以在一个循环中完成,当你到达分隔符时它会结束。然后你可以使用该类来解析字符串中的数字。您是否注意到Double中的大写字母D?这意味着我们正在调用一个名为Double的类的函数,它将解析字符串中的数字。对于int,还有类Integer,对于单精度浮点数也有Float等等。

如果表达式更长,你仍然可以使用StringTokenizer,因为有一个名为hasMoreElements的方法可以用来检查你是否在输入的末尾。

答案 1 :(得分:0)

如果您不打算扩展程序并希望尽可能简化程序,那么这可能是一种过度杀伤力。 (我们在Java编程的第一个学期中使用了这个方法,所以它应该是一个很好的练习) 您可以使用反向波兰表示法(Idea: Wikipedia)使用堆栈作为您的数字。这将使您能够使用括号并以正确的顺序执行多个操作(*,/ +, - )。另一方面,你需要围绕每个基本操作的括号(例如“((A + B)+ C)”)。

当我以这种方式实现计算器时,我逐字逐句地通过字符串在逗号后面加两位数字或数字。