Java运算符优先级比较
java是否有内置的方法来比较两个运算符的优先级?例如,如果我有一个字符“/”和一个字符“+”,我是否可以调用一个方法来比较这两个字符,并在第一个字符大于第二个字符时返回true/false(例如true)?否。最好的办法是找到一个进行语言分析的第三方jar,看看他们是否有这样的方法。您可以编写自己的API,它执行此操作并将其作为参数发送并给出结果。运算符优先级您定义它的方式虽然很常见,但并不是Java语言应该认识到的普遍真理。因此,Java语言本身没有这样的比较。当然,编写自己的代码很容易:Java运算符优先级比较,java,Java,java是否有内置的方法来比较两个运算符的优先级?例如,如果我有一个字符“/”和一个字符“+”,我是否可以调用一个方法来比较这两个字符,并在第一个字符大于第二个字符时返回true/false(例如true)?否。最好的办法是找到一个进行语言分析的第三方jar,看看他们是否有这样的方法。您可以编写自己的API,它执行此操作并将其作为参数发送并给出结果。运算符优先级您定义它的方式虽然很常见,但并不是Java语言应该认识到的普遍真理。因此,Java语言本身没有这样的比较。当然,编写自己的代码很容易:
int precedenceLevel(char op) {
switch (op) {
case '+':
case '-':
return 0;
case '*':
case '/':
return 1;
case '^':
return 2;
default:
throw new IllegalArgumentException("Operator unknown: " + op);
}
}
然后给定charop1,op2
,只需比较precencelevel(op1),precencelevel(op2)
您还可以使用if-else
,或者如果只有很少的运算符,则使用三元运算符代替开关。另一种选择是使用enum操作符实现可比较的
,但根据您所做的工作,可能像这样的解析工具更好
请注意,上面的示例将^
置于最高优先级,这意味着它可能用于表示幂运算。事实上,Java语言中的^
是异或,其优先级低于+
System.out.println(1+2^3); // prints 0
System.out.println(1+(2^3)); // prints 2
System.out.println((1+2)^3); // prints 0
这只是为了表明,这些符号的优先性,甚至语义都不是普遍真理
另见:
我不明白为什么您认为在运行时需要这些信息。在我使用过的每种语言(包括代数和英语)中,运算符优先级都是预定义的。Hi-我知道这很旧,但我最近没有登录。这个问题是针对一个涉及前缀到后缀转换的学校作业。由于前缀表达式是由用户提供的,因此需要在函数中定义操作顺序,以便在运行时计算用户提供的前缀中的操作。这没有意义。除非用户定义了运算符优先级,否则可以将其硬编码到程序结构中。