减少循环的最佳/首选习惯是什么?为什么?
for(int idx=(len-1); idx>=0; idx--) {...}
或
for(int idx=(len-1); idx>-1; idx--) {...}
或(基于sylvarking的答案,但用于约束索引范围)
for(int idx=len; idx-->0; ) {...}
是否有一个或另一个更有可能绊倒另一个开发者?
答案 0 :(得分:11)
您可能会看到另一个面向数组的变体:
int n = foo.length;
while (n-- > 0) {
/* Do something with foo[n] */
}
在你展示的选项中,我更喜欢第一个。
0
(可以说)比-1
更具可读性。 答案 1 :(得分:11)
我推荐以下内容,因为在字节代码级别优化了与零的比较。
for(int idx=(len-1); idx>=0; idx--) {...}
这是Jack Shirazi {/ 3}提出的建议
答案 2 :(得分:1)
我不能说我见过后者,所以这是第一次投票。
应该没有性能差异。
注意你的循环遍历max + 1个元素。通常我认为我期望从max-1迭代到0。
答案 3 :(得分:1)
有趣的问题!就个人而言,我使用第一个,这是我看到其他程序员最常用的。我认为原因是人们习惯于测试零,-1可能会抛出一些。
答案 4 :(得分:0)
第一个;这是标准方式。
答案 5 :(得分:0)
第二个仍然让我感到困惑 第一个是(或多或少)一个人期待的东西,在递减循环中,人们不必检查> -1而不是等于。
就个人而言,我会像Mark Byers写的那样完成。
答案 6 :(得分:0)
我的投票是:
for(int idx =(len-1); idx> = 0; idx - )
顺便说一句,我赞成for循环中的前缀增量/减量运算符(--idx),因为它会避免使用不必要的idx副本(尽管许多编译器可能会认识到这一点并为你修复它)。
答案 7 :(得分:-1)
我发现带有计数器的for循环应该只从零开始到达某个限制。
for(int i = 0; i < MAX; i++) {
....
}
这是非常成熟的,你可以期待任何看到这个的人立刻明白发生了什么。这也意味着来自该形式的任何偏差,通过向后计数或从一开始计数或从三步开始,都会使其难以理解,因为您需要识别它是不同的,解析它并理解它。这包括您的所有示例。
我建议写清楚:
for(int i = 0; i < MAX; i++) {
indexFromEnd = (MAX - 1) - i;
....
}
答案 8 :(得分:-2)
如果您有一个列表,请使用ListIterator:
以下基于http://www.java-samples.com/showtutorial.php?tutorialid=235
的示例class ListIter {
public static void main(String args[]) {
// create an array list
ArrayList al = new ArrayList();
// add elements to the array list
al.add("A");
al.add("B");
al.add("C");
al.add("D");
al.add("E");
al.add("F");
// use ListIterator to display contents of al backwards
ListIterator litr = al.listIterator(al.size());
while (litr.hasPrevious()) {
Object element = litr.previous();
System.out.print(element + " ");
}
System.out.println();
}
}