我想在业余时间学习java。到目前为止,我喜欢它。我目前正在开发一个更高级的简单 4 功能计算器版本。本质上,我想输入一个表达式,比如“4 + 5”,然后将其拆分为第一项、第二项和一个运算符,然后根据检测到的运算符符号计算答案并输出答案。我的问题是我将表达式存储在 char 数组中并且效果很好,除非第一项是两位数,或者用户添加了另一个运算符。我怎样才能保持这种动态性以允许多种形式的简单表达式?
2 回答
我会尝试使用 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 的方法,您可以使用它来检查您是否处于输入的末尾。
如果您不打算扩展您的程序并希望使其尽可能简单,那么这可能完全是多余的。(我们在 Java 编程的第一学期就使用了这种方法,所以它应该是一个很好的练习)您可以使用反向波兰表示法(想法:维基百科)为您的数字使用堆栈。这将使您能够使用括号并以正确的顺序执行多个操作(*、/ 在 +、- 之前)。另一方面,您需要在每个基本操作周围加上括号(例如“ ((A+B)+C) ”)。
当我以这种方式实现计算器时,我逐个字符地通过字符串将带有两位数或逗号后数字的数字相加。