Iterate with for loop or while loop?我经常看到这样的代码:
但我这样写(当Java 1.5不可用或无法使用Java 1.5时)为:
因为
我认为代码应该尽可能地易于理解,这样我就只需编写复杂的代码即可完成复杂的事情。 你怎么看? 哪个更好? 来自:http://jamesjava.blogspot.com/2006/04/iterating.html 我更喜欢for循环,因为它还将迭代器的作用域设置为for循环。 while,for和foreach构造有适当的用途:
显然,上面有一些例外,但这是我决定使用其中的一般规则。话虽如此,我倾向于更频繁地使用 为什么不使用for-each构造? (我已经有一段时间没有使用Java了,但是它存在于C#中,并且我很确定Java 1.5也有使用):
正如您所指出的,我认为范围是这里最大的问题。 在" while"示例中,迭代器在循环外部声明,因此在循环完成后它将继续存在。如果在以后的某个时间再次使用相同的迭代器,则可能会导致问题。例如您可能忘记在另一个循环中使用它之前对其进行初始化。 在" for"示例中,迭代器在循环内部声明,因此其范围仅限于循环。如果您尝试在循环后使用它,则会出现编译器错误。 恕我直言,如果您从英语角度看这段代码,则在这种情况下,for循环的可读性较差。我正在编写一个代码,其中的作者确实滥用了循环,而且效果不佳。比较以下内容:
与
如果只使用一次迭代器并将其丢弃,则首选第二种形式;否则,您必须使用第一种形式
使用for循环,您可以使用单个变量,因为它为当前仅用于for循环的变量设置了范围。但是,这在while循环中是不可能的。 for(i = 0; i n2; i + = 2)做点什么。
因此,在第一个循环之后,i = n1-1最后。但是在使用第二个循环时,您可以将i再次设置为0。 int i = 0; while(我小于限制){做某事..; i ++; } 因此,最后我将设置为limit-1。因此,您不能在另一个while循环中使用相同的i。 并非在这种情况下可能很重要,但是编译器,VM和CPU通常使用他们在幕后使用的特殊优化技术,这些技术可使循环性能更好(并在不久的将来并行化),通常它们不会这样做。 while循环(因为很难确定其实际运行方式)。但是在大多数情况下,代码清晰度应该胜过优化。 我同意迭代时" for"循环更清晰,更合适。 " while"循环适用于轮询,或者满足退出条件的循环数将根据循环内的活动而变化。 学术界倾向于使用while循环,因为它可以简化程序的推理。我倾向于使用for或foreach循环结构,因为它们使代码更易于阅读。 两者都很好,但请记住,有时直接访问Iterator很有用(例如,如果要删除符合特定条件的元素-如果在for(T o内执行collection.remove(o),则会得到ConcurrentModificationException:集合)循环)。 我更喜欢在几乎所有时间都编写for(blah:blah)[foreach]语法,因为它对我来说似乎更自然易读。一般来说,迭代器的概念在编程之外并没有真正的相似之处 我是为了清晰起见的for循环。当我遇到一些不确定的条件时使用while循环。 我同意应尽可能使用for循环,但有时会在循环体内控制更复杂的逻辑,以控制迭代器。在这种情况下,您必须花点时间。 尽管两者都很好,但我倾向于使用第一个示例,因为它更易于阅读。 使用while()循环在每一行上进行的操作较少,这使代码新手可以更轻松地了解所发生的情况。 这种类型的构造还使我可以将初始化分组在一个公共位置(在方法的顶部),这也简化了我的注释,并为第一次阅读它的人提供了概念化。 都可以。我自己用于(),并且我不知道是否存在编译问题。我怀疑它们都已经优化到几乎相同的东西。 |