使用’return’打破Java中的for循环是不好的风格?
我正在为CS类做一个基本Java项目。 该项目有一个嵌套在while循环中的for循环。
我不允许使用break
作为早期结束for循环的方法。 我发现return
似乎与break
具有相同的效果。 使用return
作为打破循环的一种方式是不好的风格?
我的for循环必须检查三个不同的语句,但如果它找到一个是真的那么它应该直接结束而不继续检查其余的语句。
我试图在while循环中放置一个布尔运算符来控制for循环,但是这不会控制for循环内部的内容,直到for循环结束。
如果return
没有返回任何内容也有关系吗?
299/01/11更新:非常感谢大家的评论。 我发现阅读所有辩论真的很有帮助。
我和我的导师谈过,结果是为了获得满分,我也不应该使用return
。
所以我发现在’for’循环中设置布尔值的建议确实很有帮助,因为我不知道你能做到这一点。
如果断开循环后的第一件事是return
语句,它们将只是等价的。
在任何情况下,如果您的讲师不允许break
,他们可能也不允许return
。
您应该知道这些规则背后有很好的基础(防止意大利面条代码并使编写可维护代码更容易),但有时它们会过于强烈地执行。
例如,该细分市场没有什么不可读的:
if (x == 0) return 0; return x - 1;
即使它有多个return
语句。
无人多次回归人群的首选解决方案如下:
int y = x - 1; if (x == 0) y = 0; return y;
在我看来,这既不易读也不浪费空间。
当你有非常复杂的逻辑和人们跳过的箍以避免break
和/或return
导致条件接近不可读时,真正的问题就出现了。
听听你的讲师 – 他们毕竟是控制你获得的成绩的人。 然后,一旦你进入现实世界,你就可以从教条主义转向实用主义并构建自己的思想。
请参阅此处 ,了解有关教育机构以外的这些问题的一些好建议。
首先,如果你明智地使用它,使用break
是不错的风格。
虽然我理解为什么你的教授现在坚持不break
编码(因为很多人,尤其是初学者,倾向于’过度使用’),但没有理由完全禁止它。
使用return作为打破循环的一种方式是不好的风格?
就个人而言,我认为你会没事的:代码只会变得更简单。 但显然你的教授是这里的高级权威。 整个问题非常主观,因此我无法告诉他。
但同样,无论你的教授sais如何,在循环中使用return
并不是一种糟糕的风格。
这个问题似乎进入了一个非常古老的尚未解决的论点,即“ 单一与多方法退出点 ”。
因此,如果在循环中使用返回令您(或您的老师)感到担忧,您(或他)可以在这里查看 。
回答你的问题。 在我(而不仅仅是我的)意见中使用循环返回绝对可以。
但请注意,过度使用它可能会降低代码的可读性(有关详细信息/示例,请参阅链接的答案)。
如果’return’没有返回任何东西也有关系吗?
这取决于您的方法的返回类型。 如果返回类型为void,则return子句必须为空:
return;
否则,return子句必须返回所需的类型,例如
return true; // legal for boolean return type return null; // legal for all object types return "Hello"; // legal if return type is String
从纯粹的观点来看,不应该使用断裂。 while循环的要点是你使用循环开始时的条件来突破它,如果你开始使用break语句泛滥你的循环而不是让条件正确(这是一个快速的黑客学生很可能会被诱惑使用,如果他们无法弄清楚如何以正确的方式做事!)同样的事情继续并在循环中间返回。
所有这些语言function都是有原因的,是的,有时它们是最好的做事方式。 然而,当你刚刚开始时,你明智和正确地使用它们的机会很少,它们更有可能被用作免费的“黑客让我离开监狱而不了解这个东西是如何工作的”牌。 而且,我认为,这是一个足以让他们在基础编程课程中使用的理由。
break
和return
都不一样。 break
将暂停最内层循环的执行, return
将从当前方法返回 – 即该方法中不再执行任何操作。 据我所知,在循环中使用break没有任何问题; 大概这是一个人为的要求,以便让你想到替代逻辑。 使用return
也没有错; 这将使您免于可怕的嵌套条件( if
条款)。
如果不允许使用break
,那么不使用return
也是有意义的,因为每个带break
循环都可以重写为带有return
的循环(通过将其外包到一个单独的函数中)。
从非作业的角度来看, break
(和return
)是非常有用的语言特性,通常不被认为是不好的样式(当然,每个语言构造都可以被滥用来编写错误的代码)。
然而,在你的家庭作业场景中,我想它会break
作业的重点,只是通过使用return
来“解决”缺失的break
。 你应该想办法解决你的任务。
我试图在while循环中放置一个布尔运算符来控制for循环,但是这不会控制for循环内部的内容,直到for循环结束。
这是真的,但是,通过使用if
语句,您还可以根据您的布尔值执行/不执行循环内的代码。
您可以像这样提前终止for循环
for (int i = 0; i < SOMELIMIT && (!found); ++i) {...}
我想你的导师想要你在for循环的条件部分使用break条件。 您需要在循环之前声明此条件并在循环内更改它。
boolean stop = false; for (...; ... && !stop; ...) { ... if (...) { stop = true; } }
这是关于完美的代码。
for(int i; i < stop; i++) { boolean flag = true; while(flag && condition) { //some action if(shouldIstop) { flag = false; } } }
当您将标志设置为false时,您将从while退出,当您将i设置为停止时,您也将退出。
您将获得相同的结果,但代码质量和易读性将降低。