如何检测循环结束(每个循环)?

| 使用
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
起始值之间的区别。     

要回复问题请先登录注册