2011-01-26 77 views
13

我正在做一个CS类的基本Java项目。该项目有一个嵌套在while循环中的for循环。使用'return'来破坏Java中的for循环是否是不好的风格?

我是不允许使用break作为早期结束for循环的一种方式。我发现return似乎与break有相同的效果。使用return作为打破循环的一种方式是不好的风格?

我的for循环经历了三个不同的语句来检查,但如果它找到一个为真,那么它应该结束马上不继续检查报表的其余部分。

我试图把一个布尔运算符while循环for循环控制,但不控制内发生的事情进行循环,直到for循环到达终点。

如果return不返回任何东西,这也有关系吗?

299/01/11 更新:谢谢大家这么多的意见。我发现通读所有辩论真的很有帮助。

我跟我的导师和原来为获得满分的目的,我不应该使用return无论是。

所以我发现在'for'循环中设置布尔值的建议确实很有帮助,因为我不知道你可以这样做。

+2

我不知道什么是不允许使用'break'的背后令人费解的推理。 – andri 2011-01-26 13:53:48

+0

为你的条件添加一个标志。 – 2011-01-26 13:57:10

+1

@andri,因为这是一个基本的Java类,我完全看到(并同意)为什么禁止打破。如果不是那么机会是一半的答案将是可怕的,而(真)循环与他们中的断言... – berry120 2011-01-26 14:41:54

回答

14

它们只有在突破循环后的第一件事是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而跳过的环节导致出现不可读的条件时,会出现真正的问题。

听听你的讲师 - 他们毕竟是控制你的成绩的人。然后,一旦你进入现实世界,你可以从教条主义切换到实用主义,并且做出自己的想法。

了解有关教育机构以外的这些问题的一些好的建议请参见here

2

breakreturn是不一样的。 break将停止执行最内层循环,return将从当前方法返回 - 即在该方法中将不会执行任何更多操作。据我所知,在循环中使用break没有任何问题;大概这是一个人为的要求,以便让你思考替代逻辑。而且使用return也没有错;这可以帮助您避免可怕的嵌套条件(if子句)。

2

如果您不允许使用break,话很有道理不使用return为好,因为与break每个循环可以return被改写为一个循环(通过其外包到一个单独的功能)。

从一个非作业点,break(和return)是非常有用的语言特性通常是认为是不好的风格(当然,每一种语言结构可以被滥用来写不好的代码)。

但是,在您的家庭作业场景中,我认为它会通过使用return将作业点击败break“解决方法”。你应该想办法解决你的任务。

我试图在while循环中放置一个布尔运算符,该运算符控制for循环,但不控制for循环内的内容,直到for循环结束。

这是事实,但是,通过使用if语句,你也可以执行/不执行代码根据您的布尔环。

6

首先,它的不是不好使用的样式break,如果你明智地使用它。
虽然我明白为什么你的教授现在坚持不用break(因为很多人,尤其是初学者,往往会过度使用它),所以没有理由完全禁止

使用return作为打破循环的一种方式是不好的风格吗?
就我个人而言,我认为你会没事的:代码将变得更简单。但显然你的教授是这里的上级。整个问题是非常主观的,所以我不能告诉他。

但是,不管你的教授是什么,在一个循环中使用return而不是一个不好的风格。

2

如果'返回' 不返回任何东西,这也有关系吗?

这取决于你的方法的返回类型。如果返回类型是无效的,一个return子句必须是空的:

return; 

否则,返回子句必须返回所需的类型,例如

return true; // legal for boolean return type 
return null; // legal for all object types 
return "Hello"; // legal if return type is String 
1

您将得到相同的结果,但代码质量和可读性会降低。

2

你可以这样

for (int i = 0; i < SOMELIMIT && (!found); ++i) {...} 
2

我想像你的导师希望你在的条件部分用于循环使用断点条件,早期终止一个for循环。你需要在循环之前声明这个条件并在循环中改变它。

boolean stop = false; 

for (...; ... && !stop; ...) { 
    ... 
    if (...) { 
     stop = true; 
    } 
} 
2

这是关于完美的代码。

for(int i; i < stop; i++) { 
boolean flag = true; 

while(flag && condition) { 
    //some action 
    if(shouldIstop) { 
    flag = false; 
    } 
} 
} 

当您设置标志设置为false,那么你将在退出时,当您将设置我停止,那么你也会从退出。

3

从纯粹的角度来看,break可以说是不应该使用的。 while循环的要点是,你使用循环开始时的条件来打破它,如果你开始用循环语句泛滥你的循环,而不是获得正确的条件(这是一个快速入门的学生如果不能解决如何以正确的方式做事情,可能会被诱惑使用!)循环中继续和返回也是一样。

所有这些语言功能都是有原因和是的,有时它们是做事的最佳方式。然而,刚开始的时候,你明智而恰当地使用它们的机会很少,它们更可能被用作免费的“黑客让我离开监狱而不理解这件事情如何运作”。而且,我认为,这是一个很好的理由来禁止他们在基础编程课程中使用。

5

这个问题似乎进入了一个很老的仍然没有解决的论点,“单一与多个方法出口点”的领土。

因此,如果在回路中使用回报让您担心(或您的老师),您(或他)可能会看看here

回答你的问题。 在我的(而不仅仅是我的)意见中使用循环返回肯定是好的。

但请注意,过度使用它可能会降低代码的可读性(有关详细信息/示例,请参阅链接的答案)。

相关问题