java - 在 Java 中不使用 if 语句

标签 java esoteric-languages

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

最终,我正在尝试编写一个接受 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/

相关文章:

java - JDBC session 和 Oracle 进程之间的关系

java - 从ant调用WS

virtual-machine - 如果我的 malbolge 程序只包含 1 条指令,应该用什么来填充内存?

brainfuck - 你能用一个符号创建一种编程语言吗?

algorithm - 是否可以按顺序遍历k叉树?

java - 最终字段如何不泄漏内存?

java - 如何从eclipse的jar写入Jmeter的日志

java - 如何在 Swing java 中制作 JFrame 模态

esoteric-languages - 如何运行 Esoteric Language ZOMBIE

lisp - Lisp 中的 "*** - EVAL: undefined function X"