java - While 循环而不破坏先前的引用

标签 java android while-loop

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

            //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. 

最佳答案

这不是问题。

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

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

关于java - While 循环而不破坏先前的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13238497/

相关文章:

c++ - 混淆 while(cin >> x && x != 0) (当 int x = 0 时)与 while(x != 0 && cin >> x ) (当 int x = 1 时)

java - 解决了无论如何要在不创建另一个扫描仪的方法中执行此操作吗?

java - 在 Java Servlet 和普通 Java 应用程序之间进行通信的更好方法

java - 从现有 ArrayList 创建 ArrayList

java - Eclipse:我正在使用 ANTLR4 插件,如何让 Eclipse 构建由 ANTLR4 插件创建的工件?

android - Onkeydown return false 和 return super.onkeydown() 有什么区别?

php - WHILE 循环中的 mysqli 查询

android - 如何在 Android BLE 上读取超过 23 个字节

Android 转换为序数格式

php - 连接 2 个表时出现问题