不在Java中使用if语句

Jam*_*mes 5 java esoteric-languages

这是一个非常奇怪且非常具体的问题.

最终我正在尝试编写一个程序转换,它接受java源代码,并将其转换为不使用它(除其他外)

  • 数组
  • 循环
  • 用户定义的方法
  • 如果声明

这是我为自己设定的挑战,在我的老师告诉我没有使用这些东西后编写程序是不可能的.

我已经解决了大部分问题,包括函数内联和数组替换,但是我无法弄清楚如何管理if语句.

在C++中,我使用标签和gotos,也许?:,但Java不支持GOTO语句.

我的问题是:给出一段代码,

if(CONDITION)
{
   //More code in here
}
Run Code Online (Sandbox Code Playgroud)

如何对其进行转换以使其在功能上相同,但不使用if关键字.请注意,循环结构也是不可能的.

鉴于此,创建else以及if语句会很容易.但是我也不确定如何使用它创建循环,因为没有GOTO语句和方法是不可能的.

编辑:请注意,也不允许切换,也不允许递归(由于无法定义用户方法,并且递归的主函数不适用于每个程序)而排除.?:运算符不适用于所有情况.AFAIK你不能用?:调用void函数,因为它想要将一个值作为其操作的一部分.

这些条件来自IB计算机科学SL需要课程,我正在考虑HL和作为一个班级,我们嘲笑SL的"掌握"因素,其中包括'if'语句(如果其中3/15是'用户定义'具有参数和返回类型的方法)挑战实际上是在SL中进行精通测试,同时仍然生成正常运行的程序.

答案:(由bdares提供)

String result = (CONDITION)?"0":"A";
try{
    Integer.parseInt(result);
    //Condition is true
} catch(NumberFormatException e){
    //Condition is false
}
Run Code Online (Sandbox Code Playgroud)

小智 2

if(A) {
    X();
}
else{
    Y();
}
Run Code Online (Sandbox Code Playgroud)

可以转换为:

A?X():Y();
Run Code Online (Sandbox Code Playgroud)

您可以将它们嵌套在您想要的所有内容中,或者简单地删除一侧:并获得一个简单的if. 条件很简单。

如果您希望它适用于 void 方法,可以使用以下方法:

String result = A?"0":"A";
try{
    Integer.parseInt(result);
    X();
} catch(NumberFormatException e){
    Y();
}
Run Code Online (Sandbox Code Playgroud)