繁体   English   中英

在Java中评估数学表达式

[英]Evaluating math expressions in java

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

我会尝试使用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的方法可用于检查是否在输入末尾。

如果您不打算扩展程序并希望使其尽可能简单,那么这可能是完全的矫kill过正。 (我们在Java编程的第一学期就采用了这种方法,因此这应该是一个很好的练习。)您可以使用带有数字堆栈的反向波兰符号( Idea:Wikipedia )。 这将使您能够使用括号并以正确的顺序(*,/在+,-之前)执行多项操作。 另一方面,您将需要在每个基本操作周围加上括号(例如“ (((A + B)+ C) “)。

当我以这种方式实现计算器时,我逐个字符地将字符串与两个数字或逗号后面的数字相加。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM