这是一个非常奇怪且非常具体的问题。
最终,我正在尝试编写一个接受 java 源代码的程序转换,并将其转换为不使用(除其他外)
- 数组
- 循环
- 用户定义的方法
- If 语句
这是我为自己设定的挑战,因为我的老师告诉我,如果不使用这些东西是不可能编写程序的。
我已经解决了大部分问题,包括函数内联和数组替换,但是我不知道如何管理 if 语句。
在 C++ 中,我会使用标签和 gotos,也许还有 ?:,但是 Java 不支持 GOTO 语句。
我的问题是: 给定一段代码,
if(CONDITION)
{
//More code in here
}
如何对其进行转换,使其功能相同,但不使用 if 关键字。请注意,循环结构也不在考虑范围之内。
鉴于此,创建 else 和 else if 语句将很容易。 但是我也不确定如何使用它创建循环,因为没有 GOTO 语句和方法是不可能的。
编辑: 请注意,开关也是不允许的,递归也是不允许的(由于您无法定义用户方法,并且递归主函数不适用于每个程序,因此排除了这一点) ?: 运算符并不适用于所有情况。据我所知,您不能使用 ?: 调用 void 函数,因为它想在其操作过程中分配一个值。
这些条件来自 IB 计算机科学 SL 要求的类(class),我正在上 HL,作为一个类(class),我们 mock SL 的“掌握”因素,其中包括“if”语句(如果事实 3/15 是'具有参数和返回类型的用户定义方法)挑战在于有效地使 SL 中的掌握测试失败,同时仍然生成能够正常运行的程序。
回答:(由 bdares)
String result = (CONDITION)?"0":"A";
try{
Integer.parseInt(result);
//Condition is true
} catch(NumberFormatException e){
//Condition is false
}
最佳答案
if(A) {
X();
}
else{
Y();
}
可以转换为:
A?X():Y();
您可以根据需要嵌套这些,或者简单地删除 :
的一侧并得到一个简单的 if
。条件很简单。
如果你想让它为 void 方法工作,这里有一个方法:
String result = A?"0":"A";
try{
Integer.parseInt(result);
X();
} catch(NumberFormatException e){
Y();
}
关于java - 在 Java 中不使用 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7951108/