Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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/9/loops/2.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_Loops_Operators_Expression_Evaluation - Fatal编程技术网

Java循环来计算所有运算符

Java循环来计算所有运算符,java,loops,operators,expression,evaluation,Java,Loops,Operators,Expression,Evaluation,我需要修改这段代码,以便使用操作顺序,并能够乘法和除法,但我不知道从哪里开始。我知道if对加法和减法有效,但我只需要弄清楚如何使它乘和除 import java.util.Scanner; class Expressions { String e; void setExpressions(String exp){ e =exp; } int evaluate1(){ //e has +. -. only, single digit numbers int r = e.c

我需要修改这段代码,以便使用操作顺序,并能够乘法和除法,但我不知道从哪里开始。我知道if对加法和减法有效,但我只需要弄清楚如何使它乘和除

import java.util.Scanner;
class Expressions {
String e;

void setExpressions(String exp){
    e =exp;
}
int evaluate1(){
    //e has +. -. only, single digit numbers
    int r = e.charAt(0)-'0';
    int l = e.length();
    for(int i=1; i<=l-1; i++ )
        if (e.charAt(i) == '+')
            r += (e.charAt(i+1)-48);
        else 
            r -= (e.charAt(i+1)-'0');
    return r;
                }

int evaluateAS(){
    //e has +, -, only, multiple digit numbers
    int r = 0;
    int n = 0;
    int op = '+'; //+, -

    for(int i=0; i<e.length(); i++ ){
        if (e.charAt(i) == '-' || e.charAt(i) == '+'){
                if (op == '+')
                    r += n;
                else
                    r -= n;
                    n = 0;
                    op = e.charAt(i);
                }
                else //digits
                    n = n*10+(e.charAt(i) - '0');
        }
    if (op == '+')
        r += n;
    else
        r -= n;
    return r;
}
}
public class Runner {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    Expressions myE = new Expressions();

    System.out.println("Enter E: ");
    String e = in.next();

    myE.setExpressions(e);
    //int r = myE.evaluate1();
    int r = myE.evaluateAS();
    System.out.println(e+" = "+ r);
}
}
import java.util.Scanner;
类表达式{
字符串e;
void setExpressions(字符串exp){
e=exp;
}
int evaluate1(){
//e只有+.-.个数字
int r=e.charAt(0)-'0';
int l=e.长度();
for(int i=1;i乘法(或除法)和加法需要优先级,这意味着您不能继续从左到右计算表达式

通常,计算解析器使用反向波兰语符号()来表示数学表达式。wikipedia文章包含了许多信息以及如何使用这些信息


通常,您将使用调车场算法转换中缀(通常)将符号转换为RPN,然后您将看到计算RPN中表示的表达式是多么容易。

当您尝试使其同时进行乘法和除法运算时,您遇到了什么困难?现在它所能做的只是加法和减法运算,但我不知道从何处开始使其同时进行乘法和除法运算。因为这看起来像是您的第一个问题,我将给你一个提示:“我需要添加代码来完成…”问题要么离题,要么离主题很近。对于这样的问题,最好是你自己诚实地尝试,如果你不明白为什么你的尝试不起作用,就在这里发布。