我可以将运算符符号分配给变量并使用该变量进行条件检查吗?
char operator= '>';
int val1=10;
int val2=24;
if(val2 operator val1){
/* some code*/
}
为什么我不能在条件内使用运算符变量?
我可以将运算符符号分配给变量并使用该变量进行条件检查吗?
char operator= '>';
int val1=10;
int val2=24;
if(val2 operator val1){
/* some code*/
}
为什么我不能在条件内使用运算符变量?
嘿那不支持我认为这对我来说很有意义。
编译器在构建您的应用程序时会读入运算符。它无法知道操作员是什么,因此无法构建我在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 中的方法参数必须是表达式。运算符不是表达式。这在 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;
}
}
}
不,你不能在 Java 中那样做。
要动态定义二元关系,您需要将关系表示为对象,并使用两个参数方法进行检查:
if (binaryRelation.areRelated(a,b))
{
// Do something
}
根据您的需要,标准Comparator
接口可能适合也可能不适合。
查看Comparator或Comparable接口以及它们的使用方式。然后定义你自己的接口,它接受两个参数并返回一个布尔值,并为它们提供不同的实现(这是 OOP)。
另一种方法是等待具有lambda表达式的 Java 8。
用任何编程语言编写的代码都需要转换为汇编语言。发生这种情况时,每条用高级语言编写的代码语句都会被翻译成中级等效的指令/指令集,即 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