Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中计算数学表达式_Java_Arrays_Math_Char_Calculator - Fatal编程技术网

在java中计算数学表达式

在java中计算数学表达式,java,arrays,math,char,calculator,Java,Arrays,Math,Char,Calculator,我正试图在业余时间学习java。到目前为止,我喜欢它。我目前正在开发一个更高级的简单4功能计算器。本质上,我想输入一个表达式,比如“4+5”,然后将其拆分为第一项、第二项和运算符,然后根据检测到的运算符符号计算答案并输出答案。我的问题是,我将表达式存储在一个char数组中,除非第一个术语是两位数,或者用户添加了另一个运算符,否则效果很好。如何保持这种动态性,以允许使用多种形式的简单表达式 我会尝试使用StringTokenizer类 将输入捕获为字符串,然后使StringTokenizer如下所

我正试图在业余时间学习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可以抛出异常

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


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

如果您不打算扩展您的程序,并且希望它尽可能简单,那么这可能是一种完全的过度使用。(我们在Java编程的第一学期就有了这个方法,所以它应该是一个很好的练习) 您可以使用反向波兰符号()来对数字进行堆栈。这将使您能够使用括号并以正确的顺序(*、/before+、-)执行多个操作。另一方面,您需要在每个基本操作(例如“((A+B)+C)”)周围使用括号


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

不要对一个字符使用字符数组。字符串列表如何?请发布您的代码并给出示例,以便给人们提供更好的参考框架。另外,请解释它以何种方式不起作用;“除非第一个术语是两位数的num,或者用户添加了另一个运算符”,否则“不会指定出现了什么问题。