如何解决如何检测循环结束每个循环?
| 使用for(int i = 0; i < str.length; i++)
,我可以轻松地检测到循环是否结束。
但是我怎么知道我使用的是for
还是for each
。
for(String str : arrayString){
if(End of for) //Do something if the end of the loop
}
我使用for(:)
而不是for(;;)
的原因是str
实际上是一个大对象,我需要将该属性用于该循环中的另一个循环。而且我不喜欢使用ѭ7,这也是为了方便我进行编码。这就是为什么我想知道for(:)
循环是否在最后一个索引处。
更新
我的临时解决方案是分配一个int
变量,该变量将保留迭代次数。然后检查变量是否等于str.length
的长度。
解决方法
一种选择是编写自己的迭代器实现,该实现在每个点上都公开first,last,index和value的属性。
我为.NET做过同样的事情,而且绝非易事。在Java中,这将更加容易,因为您可以使用原始迭代器的
hasNext()
方法来确定它是否为最后一个元素。代码看起来像这样(完全未经测试):
public SmartIterable<T> implements Iterable<SmartIterator<T>.Entry>
{
private final Iterable<T> iterable;
public SmartIterable(Iterable<T> iterable)
{
this.iterable = iterable;
}
public Iterator<T> iterator()
{
return new SmartIterator<T>(iterable.iterator());
}
}
public SmartIterator<T> implements Iterator<SmartIterator<T>.Entry>
{
private final Iterator<T> iterator;
private int index = -1;
SmartIterator(Iterator<T> iterator)
{
this.iterator = iterator;
}
public void remove()
{
// Could potentially just delegate
throw new UnsupportedOperationException();
}
public boolean hasNext()
{
return iterator.hasNext();
}
public Entry next()
{
T nextValue = iterator.next();
index++;
return new Entry(nextValue,index);
}
public class Entry
{
private final int index;
private final T value;
private Entry(int index,T value)
{
this.index = index;
this.value = value;
}
public T getValue()
{
return value;
}
public int getIndex()
{
return index;
}
public boolean isFirst()
{
return index == 0;
}
public boolean isLast()
{
// Call into containing instance
return !hasNext();
}
}
}
,有两种简单的方法,根据您使用foreach循环的原因,这在某种程度上会很有趣。
int i = 1;
for (String str : arrayString) {
if (i++ == arrayString.length) {
// end
}
}
要么
for (int i = 0; i < arrayString.length; ++i) {
String str = arrayString[i];
if (i + 1 == arrayString.length) {
// end
}
}
实际上是同一件事。只需注意两个循环之间在if
中使用i
与i
起始值之间的区别。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。