将操作符号分配给变量并使用该变量进行条件检查

时间:2013-01-19 07:44:32

标签: java

我可以为变量分配操作符号并将该变量用于条件检查吗?

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

    /* some code*/

}

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

5 个答案:

答案 0 :(得分:1)

这不受支持我认为这对我有意义。

编译器在构建应用程序时读入运算符。它无法知道运营商会是什么,所以它无法构建相关的,我在http://www.daniweb.com/software-development/csharp/threads/266385/c-using-operator-as-a-variable-in-calculations

中找到了

他们在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 ) );
    }

}

礼貌:Is there an eval() function in Java?

答案 1 :(得分: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;
        }
    }
}

答案 2 :(得分:0)

不,你不能用Java那样做。

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

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

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

答案 3 :(得分:-1)

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

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

答案 4 :(得分:-1)

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

这里的附加操作在以下语句中,

int a = a + 10;

可能会转换为

ADD A 1010;

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

所以,当你尝试使用'&gt;'时在变量中,

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

/* some code*/

}

if语句,

if(val2 operator val1) 

将转换为无效指令。 它不是生成用于比较两个值的等价物,而是READ'运算符'变量。

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

因此,不允许这样做。

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

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

Do programming language compilers first translate to assembly or directly to machine code?

编译C程序的步骤。

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