首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将运算符赋给变量并使用该变量进行条件检查

将运算符赋给变量并使用该变量进行条件检查
EN

Stack Overflow用户
提问于 2013-01-19 15:44:32
回答 5查看 4.6K关注 0票数 7

我是否可以将运算符赋给一个变量,并将该变量用于条件检查?

代码语言:javascript
运行
复制
char operator= '>';
int val1=10;
int val2=24;
if(val2 operator val1){

    /* some code*/

}

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-19 16:13:49

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

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

代码语言:javascript
运行
复制
int a = a + 10;

可能会转换为

添加A1010;

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

因此,当您尝试在变量中使用'>‘时,

代码语言:javascript
运行
复制
char operator= '>';
int val1=10;
int val2=24;
if(val2 operator val1){

/* some code*/

}

if语句,

代码语言:javascript
运行
复制
if(val2 operator val1) 

将转换为无效指令。它将读取'operator‘变量,而不是生成用于比较两个值的等价物。

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

因此,这样做是不允许的。

每个编译器(java,gcc等)可能会有不同的行为,但目标是相同的。如果你更多地阅读编译器/编译/执行,你会知道更多。以下是一些链接:

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

票数 -1
EN

Stack Overflow用户

发布于 2013-01-19 15:48:04

嘿,,这不支持,我想这对我来说是有意义的。

编译器在构建应用程序时读取运算符。它无法知道运算符是什么,因此无法构建我在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之类的东西。我刚刚尝试了这个示例代码。

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2013-01-19 16:07:23

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

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

示例:

代码语言:javascript
运行
复制
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;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14412252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档