【发布时间】:2013-12-25 12:35:27
【问题描述】:
以下代码编译并执行我需要的操作。它遍历一个基于 int 的多维数组(称为 nums),并搜索所有出现的值 1。该程序的输出如下所示。需要注意三点:
- 关于“外部 for”循环语句,我使用 Java 的逗号运算符声明了两个附加变量。
- 另外关于这个“外部 for”,我在“迭代部分”中使用了另一个逗号运算符来重置这些附加变量之一。
- 关于“inner for”,我在“迭代部分”中使用了另一个逗号运算符来增加这个附加变量。
int[][] nums = {{1,1,2},{3,4},{5},{6,7,8},{9,1,1}};
for (int i=0, elsSearched=0, foundCount=0; i < nums.length; i++, elsSearched=0) {
for (int j=0; j < nums[i].length; j++, elsSearched++) {
if (nums[i][j] == 1) {
foundCount++;
}
}
System.out.println("Searched " + elsSearched +
" elements, and found \'number one\' a total of " + foundCount + " times..");
}
程序输出:
这段代码能写得更高效/更优雅吗?
我的另一个问题是关于 Java 的“for each”循环。我尝试使用带有逗号运算符的“for each”循环重写上面的代码,但代码无法编译。我很快得出了明显的结论,但是如果可以使用逗号运算符,“for each”循环会更好,还是只会引入“分散注意力的混乱”?
【问题讨论】:
-
我不认为你可以更有效地做到这一点,因为你必须至少查看每个元素一次以判断它是否是一个;)
-
另请参阅this answer,了解 for-each 循环与 for 循环的效率。