Java 循环对半VS重复直到哨兵习语
在大学里,我们学习了两种从控制台读取整数的方法,但并没有给出具体的整数。 第一个是“环半”: 他们说这是一种糟糕的方式,因为代码重复Java 循环对半VS重复直到哨兵习语,java,computer-science,Java,Computer Science,在大学里,我们学习了两种从控制台读取整数的方法,但并没有给出具体的整数。 第一个是“环半”: 他们说这是一种糟糕的方式,因为代码重复val=readInt(“Enter val:”) 他们还提出了第二种方法“重复直到哨兵成语”: 我有一位老师,他更擅长计算机科学,他总是伤心地说,最好避免在程序中使用(true)和中断,除非有紧急情况,否则不要使用它们,所以我现在有点困惑。 哪种方式被认为是更好的解决方案 第三种解决方案怎么样 boolean keepReading = true; while
val=readInt(“Enter val:”)代码>
他们还提出了第二种方法“重复直到哨兵成语”:
我有一位老师,他更擅长计算机科学,他总是伤心地说,最好避免在程序中使用(true)
和中断,除非有紧急情况,否则不要使用它们,所以我现在有点困惑。
哪种方式被认为是更好的解决方案 第三种解决方案怎么样
boolean keepReading = true;
while (keepReading) {
int val = readInt("Enter val");
if (val == SENTINEL) {
keepReading = false;
}
else {
// process the value
}
}
它与第二个类似,但不使用while(true)
和break
。我真的不喜欢第一个,因为要完成它,你还必须对哨兵重复检查:
int val = readInt(“Enter val:”);
while (val != SENTINEL)
val = readInt(“Enter val:”); // duplication
if (val != SENTINEL) { // duplication
// process the value
}
}
是的,您所说的“半循环”的问题是有一点代码重复。您称之为“重复直到哨兵”的方法不理想的原因是,成语while(true)
不能很好地表达您的意图。请参阅以获取另一种解释
在您的示例中,您可以
int value;
while ((value = readInt()) != SENTINEL) {
System.out.println(value);
}
在java中,当您执行赋值操作时,会返回结果,因此您可以在不复制代码的情况下对其进行比较
重要的一点是,它更能表达意图:您可以像读取值不是哨兵一样读取它。readInt()?您确定您正在使用核心Java库吗?这完全是一个意见问题。你可以阅读支持和反对双方的论点。作为一个基于意见的问题,这个问题被认为是一个离题的问题SO@KickButtowski那与问题无关。readInt()
的含义很明显,即使假设它是一个自定义方法。@KickButtowski我肯定更喜欢土豆。土豆是老派的,真的:)就我个人而言,我喜欢土豆。有些东西永远不会过时。
int val = readInt(“Enter val:”);
while (val != SENTINEL)
val = readInt(“Enter val:”); // duplication
if (val != SENTINEL) { // duplication
// process the value
}
}
int value;
while ((value = readInt()) != SENTINEL) {
System.out.println(value);
}