我可以为变量分配操作符号并将该变量用于条件检查吗?
char operator= '>';
int val1=10;
int val2=24;
if(val2 operator val1){
/* some code*/
}
为什么我不能在条件内使用运算符变量?
答案 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 ) );
}
}
答案 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)
查看Comparator或Comparable界面及其使用方法。然后定义自己的接口,它接受两个参数并返回一个布尔值,并为它们提供不同的实现(这是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