7

我可以将运算符符号分配给变量并使用该变量进行条件检查吗?

char operator= '>';
int val1=10;
int val2=24;
if(val2 operator val1){

    /* some code*/

}

为什么我不能在条件内使用运算符变量?

4

5 回答 5

1

那不支持我认为这对我来说很有意义。

编译器在构建您的应用程序时会读入运算符。它无法知道操作员是什么,因此无法构建我在http://www.daniweb.com/software-development/csharp/threads/266385/c-using-operator-as-a-中找到的正确性计算变量

他们是在 C# 的上下文中讨论的,但我觉得同样的事情在这里也很有意义。

您不能直接这样做,但有一些解决方法:

http://www.coderanch.com/t/568212/java/java/arithmetic-operations-operator-stored-variables

如果确实需要,我们必须在代码中使用 eval 之类的东西。我刚刚尝试了这个示例代码。

package dumb;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class OperatorAsVariable
{
    public static void main( String args[] ) throws ScriptException
    {
        String test = "+";
        System.out.println( 1 + test + 2 );
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName( "js" );
        System.out.println( engine.eval( 1 + test + 2 ) );
    }

}

礼貌:Java 中有 eval() 函数吗?

于 2013-01-19T07:48:03.663 回答
0

Java 中的方法参数必须是表达式。运算符不是表达式。这在 Java 中是不可能的。

更好的方法是传递代表这些运算符的对象(枚举)

例子:

public enum Operator{
    GREATHERTHAN(">") {
        @Override public double apply(double x1, double x2) {
            return x1 > x2;
        }
    },LEESTHAN{
        @Override public double apply(double x1, double x2) {
           return x1 < x2;
        }
    }
}
于 2013-01-19T08:07:23.467 回答
0

不,你不能在 Java 中那样做。

要动态定义二元关系,您需要将关系表示为对象,并使用两个参数方法进行检查:

if (binaryRelation.areRelated(a,b))
{
    // Do something
}

根据您的需要,标准Comparator接口可能适合也可能不适合。

于 2013-01-19T08:30:52.940 回答
-1

查看ComparatorComparable接口以及它们的使用方式。然后定义你自己的接口,它接受两个参数并返回一个布尔值,并为它们提供不同的实现(这是 OOP)。

另一种方法是等待具有lambda表达式的 Java 8。

于 2013-01-19T08:04:52.787 回答
-1

用任何编程语言编写的代码都需要转换为汇编语言。发生这种情况时,每条用高级语言编写的代码语句都会被翻译成中级等效的指令/指令集,即 JAVA 代码将被翻译成汇编语言中的机器特定指令。

这里在下面的语句中添加操作,

int a = a + 10;

可能会转换为

添加一个 1010;

当我们尝试访问变量值时,它可能会被转换为 READ 指令。

因此,当您尝试在变量中使用“>”时,

char operator= '>';
int val1=10;
int val2=24;
if(val2 operator val1){

/* some code*/

}

if 语句,

if(val2 operator val1) 

将转换为无效指令。它不会为两个值的比较生成等价物,而是读取“运算符”变量。

这显然会导致错误的解释。

因此,不允许这样做。

每个编译器(java、gcc 等)的行为可能不同,但目标是相同的。如果您阅读 Complier / Compilation / Execution 更多,您将了解更多。这些是一些链接:

http://www.coderanch.com/t/559258/java/java/java-codes-converted-assembly-JVM

编程语言编译器首先转换为汇编还是直接转换为机器代码?

AC程序的编译步骤。

http://www.herongyang.com/Computer-History/C-Program-Compilation-and-Execution-Process.html

于 2013-01-19T08:13:49.433 回答