Rus*_*ell 17 java foreach programming-languages
我正在使用Java 6.
假设我有一堆猫要喂,并假设myCats已经分类.
for (Cat cat : myCats) {
feedDryFood(cat);
//if this is the last cat (my favorite), give her a tuna
if (...)
alsoFeedTuna(cat);
}
Run Code Online (Sandbox Code Playgroud)
我想特别对待我的最后一只猫.
有没有办法在循环内优雅地做到这一点?我能想到的唯一方法是计算它们.
稍微退一步以获得更广泛的图片,是否有任何编程语言支持for-each循环中的这个小功能?
hvg*_*des 28
如果您需要这样做,最好的方法可能是使用Iterator.除此之外,你必须要数.迭代器有一个
hasNext()
Run Code Online (Sandbox Code Playgroud)
可用于确定您是否在迭代的最后一项上的方法.
编辑 - 为了提高可读性,您可以在基于迭代器的循环(psuedo)中执行以下操作:
Cat cat = iter.next();
feedDryFood(cat);
boolean shouldGetTuna = !iter.hasNext();
if (shouldGetTuna)
alsoFeedTuna(cat)
Run Code Online (Sandbox Code Playgroud)
通过巧妙使用变量名称,这是相当自我记录的代码.
小智 26
@ fbcocq的解决方案
这怎么是一个糟糕的解决方案?只需添加另一个局部变量.
Cat lastCat = null;
for (Cat cat : myCats) {
feedDryFood(cat);
lastCat = cat;
}
alsoFeedTuna(lastCat);
Run Code Online (Sandbox Code Playgroud)
编辑:首先设置null以处理myCats未设置lastCat的情况
如果它是一个必须发生在循环中最后一项的特殊行为,那么它应该发生在循环之外,你应该提供让信息逃脱循环的方法:
Cat lastCat = null;
for (Cat cat : cats)
{
// do something for each cat
lastCat = cat;
}
if (lastCat != null)
{
// do something special to last cat
}
Run Code Online (Sandbox Code Playgroud)
我建议将这两个语句的块移动到方法中.
直接使用迭代器.
Cat cat
Iterator<Cat> i = myCats.iterator()
while (i.hasNext())
{
cat = i.next()
feedDryFood(cat);
if (!i.hasNext())
{
alsoFeedTuna(cat); // Last cat.
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1110 次 |
| 最近记录: |