Java 如何计算用户给出的数学表达式?

Java 如何计算用户给出的数学表达式?,java,Java,假设用户输入以下100+12-1/3 使用Scanner,我获取输入,然后将其拆分为100、+、12、、1、/3 现在我要做的是按照提供的顺序计算总数。 那么答案是37 这是我目前的思考过程,但现在我一直在思考如何在Java中实现它,剩下的时间和操作符都是如此 这只适用于“1+1” 或“1/1” 但我需要的是一些变量来保存前2个整数的结果,然后基于表达式的其余部分进行-、*、/或加法 Scanner numstr = new Scanner(System.in); String

假设用户输入以下100+12-1/3 使用Scanner,我获取输入,然后将其拆分为100、+、12、、1、/3 现在我要做的是按照提供的顺序计算总数。 那么答案是37

这是我目前的思考过程,但现在我一直在思考如何在Java中实现它,剩下的时间和操作符都是如此

这只适用于“1+1” 或“1/1” 但我需要的是一些变量来保存前2个整数的结果,然后基于表达式的其余部分进行-、*、/或加法

    Scanner numstr = new Scanner(System.in);
    String input = numstr.nextLine();
    String [] str = input.split(" ");
    int sum =0;
    int add =0;
    int temp;
    for (int i=0;i<str.length;i++) {
        if (i%2 >0 && str[i].equals("+"))
        {
sum = Integer.parseInt(str[i-1]) + Integer.parseInt(str[i+1]);
            //sum = add;
            System.out.println(sum);

        }
        temp =sum;

        else if (i%2 >0 && str[i].equals("-"))
        {
sum = Integer.parseInt(str[i-1]) - Integer.parseInt(str[i+1]);
            //sum = temp - Integer.parseInt(str[i+1]);
            System.out.println(sum);

        }
        //temp = sum;
        else if (i%2 >0 && str[i].equals("/"))
        {
sum = Integer.parseInt(str[i-1]) / Integer.parseInt(str[i+1]);
            System.out.println(sum);

        }
        else if (i%2 >0 && str[i].equals("*"))
        {
 sum = Integer.parseInt(str[i-1]) * Integer.parseInt(str[i+1]);
            System.out.println(sum);

        }
   else if (i%2 >0 && !str[i].equals("+")&&!str[i].equals("-")&&!str[i].equals("/")&&!str[i].equals("*"))
        {

            System.out.println("unknow operator");

        }

    }
Scanner numstr=新扫描仪(System.in);
字符串输入=numstr.nextLine();
字符串[]str=input.split(“”);
整数和=0;
int add=0;
内部温度;
对于(int i=0;i0&&str[i]。等于(“+”)
{
sum=Integer.parseInt(str[i-1])+Integer.parseInt(str[i+1]);
//总和=相加;
系统输出打印项数(总和);
}
温度=总和;
如果(i%2>0&&str[i].等于(“-”)则为else
{
sum=Integer.parseInt(str[i-1])-Integer.parseInt(str[i+1]);
//sum=temp-Integer.parseInt(str[i+1]);
系统输出打印项数(总和);
}
//温度=总和;
else如果(i%2>0&&str[i].equals(“/”)
{
sum=Integer.parseInt(str[i-1])/Integer.parseInt(str[i+1]);
系统输出打印项数(总和);
}
else如果(i%2>0&&str[i].equals(“*”))
{
sum=Integer.parseInt(str[i-1])*Integer.parseInt(str[i+1]);
系统输出打印项数(总和);
}
如果(i%2>0&&!str[i]。等于(“+”&&!str[i]。等于(“-”&&!str[i]。等于(“/”&&!str[i]。等于(“*”)
{
System.out.println(“未知运算符”);
}
}
所以对于1+2+5*30 将是: 3. 8.
240这回答了你的问题吗。还可以搜索后缀符号,看看这是否给了您一些想法。如果没有括号,那么您只需要sum变量。将第一个数字读入其中,然后交替读取运算符和数字,并将其添加到结果中,直到输入用尽为止。您可以使用
Scanner
nextInt()
next()
功能来读取您的数字和运算符。@WJS您好,谢谢,但我已经用尽了internet上讨论的所有其他类似主题,我似乎仍然不明白,如何进行…@Jannik,我如何使用nextInt,用户何时在一行上提供1+1+1?scanner类根据您调用的方法根据一些规则分割您的输入。例如,如果调用
nextLine
,它将在换行符处拆分。如果使用
next
,它将在空格处拆分。对于
nextInt
,它尝试读取下一个字符并将其解析为整数值。