Java 如何编制程序根据数学运算顺序进行相应计算?(爪哇)
我正在尝试用Java编写一个程序,它将输入一个字符串值 如s=“1+27-63*5/3+2”并以整数值形式返回计算结果 下面是我的代码Java 如何编制程序根据数学运算顺序进行相应计算?(爪哇),java,string,for-loop,arraylist,calculator,Java,String,For Loop,Arraylist,Calculator,我正在尝试用Java编写一个程序,它将输入一个字符串值 如s=“1+27-63*5/3+2”并以整数值形式返回计算结果 下面是我的代码 package numberofcharacters; import java.util.ArrayList; public class App { public static void main(String[] args) { String toCalculate = "123+98-79÷2*5"; int oper
package numberofcharacters;
import java.util.ArrayList;
public class App {
public static void main(String[] args) {
String toCalculate = "123+98-79÷2*5";
int operator_count = 0;
ArrayList<Character> operators = new ArrayList<>();
for (int i=0; i < toCalculate.length(); i++){
if (toCalculate.charAt(i) == '+' || toCalculate.charAt(i) == '-' ||
toCalculate.charAt(i) == '*' || toCalculate.charAt(i) == '÷' ) {
operator_count++; /*Calculating
number of operators in a String toCalculate
*/
operators.add(toCalculate.charAt(i)); /* Adding that operator to
ArrayList*/
}
}
System.out.println("");
System.out.println("Return Value :" );
String[] retval = toCalculate.split("\\+|\\-|\\*|\\÷", operator_count + 1);
int num1 = Integer.parseInt(retval[0]);
int num2 = 0;
int j = 0;
for (int i = 1; i < retval.length; i++) {
num2 = Integer.parseInt(retval[i]);
char operator = operators.get(j);
if (operator == '+') {
num1 = num1 + num2;
}else if(operator == '-'){
num1 = num1 - num2;
}else if(operator == '÷'){
num1 = num1 / num2;
}else{
num1 = num1 * num2;
}
j++;
}
System.out.println(num1); // Prints the result value
}
}
package numberofcharacters;
导入java.util.ArrayList;
公共类应用程序{
公共静态void main(字符串[]args){
字符串toCalculate=“123+98-79÷2*5”;
int运算符_计数=0;
ArrayList运算符=新的ArrayList();
for(int i=0;i
****问题是我需要按照数学中的运算顺序进行计算,比如首先是乘法和除法,而不是加法和减法。
我如何解决这个问题****
我使用了String split()方法来分离出现运算符“+-/*”的字符串。我使用字符ArrayList在其中添加运算符。
在代码的最后一部分,我在拆分字符串数组中循环,并通过将其解析为整数,使用拆分字符串数组的第一个值初始化int num1。和int num2,使用第二个值和运算符arraylist在它们之间执行计算(无论该arraylist索引处的运算符是什么)。并将结果存储在int num1中,反之亦然,直到字符串数组结束
[p.S]我尝试使用Collection.sort,但它按照[*,+,-,/]的顺序对上面的arraylist运算符进行排序。它把除法放在末尾,而它应该把除法放在乘法符号之后或之前如果你想用大致相同的代码结构来做,而不是先把它变成类似于反向波兰符号的东西,你可以尝试一种以反向优先顺序处理操作的方法 所以假设
*
和/
具有最高优先级,并且将它们视为同等优先级,因此从左到右处理;对于+
和-
也一样;那你会的
+
和-
上拆分+
和-
分隔的部分,但现在按从左到右的顺序处理*
和/
+
和-
应用于这些评估零件3*4+5-6/2
,那么您的代码将首先拆分为
3*4 + 5 - 6/2
现在计算这些子表达式
12 + 5 - 3
现在从左到右处理以评估最终答案
14
更一般地说,通过表达式所需的通过次数取决于优先级的数量;您需要从最低到最高处理优先级。分裂表达;递归地计算子表达式,只考虑下一个优先级和上一个优先级;合并得到最终答案
这将是一个很好的Java8Streams小练习 处理这种情况的一种常用方法是将输入转换为前缀符号,并使用堆栈进行处理。你为什么认为sort在这里会有帮助?排序的作用是根据某种顺序重新排列集合中项目的顺序——默认情况下,这只是字符串的字典顺序。简单的方法是使用ScriptEngine:我真的认为这种排序在这里没有帮助。起初,我只是想找到一种方法,来验证java是否根据数学中的运算顺序对运算符进行排序。“java根据运算顺序对运算符进行排序”——这方面没有内置的帮助。你可以写你自己的方法来实现这一点,但是上面提到的想法是实现目标的更好的方法。仅供记录。这对我有用!非常感谢。