0

首先,总结一下:我正在解决 CodingBat.com 上的一些基本问题(对于初学者或像我这样生疏的人来说是好东西),并决定以“新”方式循环遍历数组。

我说我“生锈了”。

这有效:

public int arrayCount9(int[] nums) {
  int b=0;
  for(int i=0; i<nums.length;i++){
    if(nums[i]==9) b++;
  }
  return b;
}

这不起作用:

public int arrayCount9(int[] nums) {
  int b=0;
   for(int i: nums){
     if(nums[i]==9) b++;
   }
  return b;
}

错误:异常:java.lang.ArrayIndexOutOfBoundsException:9(行号:4)

*所以问题是 if(nums[i]==9) b++; *

所以我的问题是:

1) *有什么问题?*

2) *有人有规格参考吗?*

关于#2,我试过谷歌搜索,但没有找到我要找的东西,即使有教程,我也无法完全掌握下面的巫术。

我提前谢谢你。

编辑 相关问题的链接

4

4 回答 4

4

您将迭代值用作索引。它应该是:

for(int i: nums){
    if(i==9) b++;
}

因此,如果您的值大于数组中的数组大小,则会出现索引越界异常。

于 2013-04-03T19:32:15.497 回答
4

您对 for each 循环的工作方式感到困惑。
这样做,看看你是否能找出问题所在

   for(int i: nums){
     System.out.println(i);
   }
于 2013-04-03T19:33:28.737 回答
3

当您以“新方式”使用它时,您不再需要访问数组,您已经拥有循环内每个项目的引用。

public int arrayCount9(int[] nums) {
  int b=0;
   for(int i: nums){
     if(i == 9) b++;
   }
  return b;
}
于 2013-04-03T19:33:04.507 回答
0

请参阅规范的这一部分:

http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#d5e17093

它会解释这一切。增强的 for 循环将立即从迭代器返回值,因此您的 'i' 实际上是数组值而不是索引。

于 2013-04-03T19:35:19.827 回答