我在教自己如何编码。 这是一本书的练习。 我能够立刻编写for循环。 为什么我很难将这个for循环转换为for each。 我错过了什么或做错了什么。感谢。
/**
* Exercise 4.75
* Add a method busiestHour to LogAnalyzer that returns the busiest hour
* You can do this by looking into the hour counts array to find the element
* with the biggest count.
* Hint: Do you need to check every element to see if you have found the busiest
* hour? If so, use a for loop or a for-each loop. Which one is better in this case.
*/
public int busiestHour(){
int max = hourCounts[0];
int counter = 0;
for(int index = 0; index < hourCounts.length; index++){
if(max < hourCounts[index]){
max = hourCounts[index];
counter = index;
}
}
return counter;
}
/**
* for each version my attempt
*/
public int busiestHour2()
{
int max = hourCounts[0];
int counter = 0;
for(int index : hourCounts){
if(max < hourCounts[index]){
max = hourCounts[index];
counter = index;
}
}
return counter;
}
答案 0 :(得分:0)
for-each遍历元素并使用元素而不是索引。因此,for(int index : hourCounts){
index
hourCounts
实际上已经是{{1}}中的当前元素。换句话说,你有当前小时的计数。例如,如果你遍历一个String数组,那么for-each循环中的变量声明将是String类型,而不是int。这也意味着您根本无法访问索引,除非您自己这样做。
我不会为这个问题展示一个解决方案(这也很难看),但我认为这个练习的目的是向你展示for-each的限制以及经典的for-loop仍然在哪里它的理由。
答案 1 :(得分:0)
如前所述,for each
语句遍历列表或元素数组,提供序列中的下一个元素。 for
语句为列表或数组提供迭代器,让程序员决定如何使用该迭代器。
对于您的情况,正确的for each
语句应为:
public int busiestHour2()
{
int max = hourCounts[0];
int counter = 0;
int index = 0;
for(int hourCount : hourCounts){
if(max < hourCount){
max = hourCount;
counter = index;
}
index = index + 1;
}
return counter;
}