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

Java运算符优先级比较

Java运算符优先级比较,java,Java,java是否有内置的方法来比较两个运算符的优先级?例如,如果我有一个字符“/”和一个字符“+”,我是否可以调用一个方法来比较这两个字符,并在第一个字符大于第二个字符时返回true/false(例如true)?否。最好的办法是找到一个进行语言分析的第三方jar,看看他们是否有这样的方法。您可以编写自己的API,它执行此操作并将其作为参数发送并给出结果。运算符优先级您定义它的方式虽然很常见,但并不是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-我知道这很旧,但我最近没有登录。这个问题是针对一个涉及前缀到后缀转换的学校作业。由于前缀表达式是由用户提供的,因此需要在函数中定义操作顺序,以便在运行时计算用户提供的前缀中的操作。这没有意义。除非用户定义了运算符优先级,否则可以将其硬编码到程序结构中。