0

在下面的循环marker中是一个列表,它被迭代并且每个项目都被绘制在画布上。但是,随着循环的进行,我相信以前的引用已被破坏。如何为循环的每次运行创建一个唯一的实例?

            //Draw AR markers in reverse order since the last drawn should be the closest
        ListIterator<Marker> iter = collection.listIterator(collection.size());
        while (iter.hasPrevious()) { 
            Marker marker = iter.previous();
            marker.draw(canvas);
        }

我尝试了以下但无济于事。循环到达第二个项目然后有一个 NoSuchElementException。

        while (iter.hasPrevious()) {
        int i = 0;
        try {

            Marker marker = iter.previous();
            marker.draw(canvas);
            ++i;
            System.out.println("Item number 1 " + i);
            Marker marker1 = iter.next();
            marker1.draw(canvas);
            ++i;
            ... repeated up to marker7 then catching the NoSuchElementException. 
4

1 回答 1

1

这不是问题。

你不是在创建新Marker对象,只是从一个 iterable 中读取它Collection。原始集合(可能还有其他对象)包含对您正在循环的对象的引用,因此它们不会被破坏。

您的第二个代码仅iter.hasPrevious()在循环开始时检查,但它正在执行许多操作。如果 /iterator 中没有足够的元素Collection,那么在尝试访问不存在的元素时会出现异常(例如,在到达第一个元素iter.previous()之后执行操作)。iter

于 2012-11-05T19:02:04.153 回答