可以在二维数组上创建 Java 迭代器吗?

发布于 2024-12-03 15:10:05 字数 32 浏览 1 评论 0原文

您可以创建一个迭代器来遍历二维数组中的所有空间吗?

Can you create a single Iterator that will step over all spaces in a 2d array?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

浪荡不羁 2024-12-10 15:10:05

如果您实现 Iterable< /a> 接口,您可以使用 进行-每个循环。相关示例可以在此处找到。

If you implement the Iterable interface, you can use a for-each loop. Related examples may be found here.

最终幸福 2024-12-10 15:10:05

是的,将数组包装在一个对象中,并让该对象实现迭代器接口。所以这是可以做到的。我不知道 Jdk 附带有任何这样的迭代器。

Yes, wrap the array in an object and make the object implement the iterator interface. So it can be done. I am not aware of any such iterator that ships with the Jdk.

半步萧音过轻尘 2024-12-10 15:10:05

是的,这是可以做到的,正如@Scorpion所说。事实上,解决方案可能非常简单:不超过 10 行可执行代码……如果我正确理解了问题的话。

不,JDK 中没有方便的方法来执行此操作。我不知道任何“公共”图书馆中有一个。 (原因:这个特定问题过于专业,对少数程序员来说没有用。)

这应该是您自己实施解决方案的充分答案。


我/我们应该为您提供盆栽溶液吗?国际海事组织,不。

  • StackOverflow 不是“我们免费编写您的代码”服务。

  • 如果您自己动手,您将了解更多信息:阅读优秀的"您尝试过什么?” 博客文章。

(即使有人确实想为您编写代码,您也没有对要实现的问题给出足够清晰的描述......而无需进行大量猜测。)

Yes, it can be done, as @Scorpion says. In fact, the solution is probably pretty simple: no more than 10 lines of executable code ... if I correctly understand the problem.

No, there isn't a convenience method in the JDK to do this. And I'm not aware of one in any of the "commons" libraries. (Reason: this particular problem is too specialized to be useful to more than a handful of programmers.)

This should be a sufficient answer for you to go and implement the solution yourself.


Should I / we provide you a potted solution? IMO, no.

  • StackOverflow is not a "we write your code for free" service.

  • If you do it yourself you will learn more: read the excellent "What have you tried?" blog article.

(And even if someone did feel like writing the code for you, you didn't give a clear enough description of the problem to implement ... without making lots of guesses.)

删除→记忆 2024-12-10 15:10:05

我不认为在从数组调用两个迭代器时需要创建一个迭代器,效果很好,如下所示:

int 2dArray[][];
for(int 1dArray[]: 2dArray){
    for(int i: 1dArray){
        //do stuff
    }
}

I dont see the need to make a single iterator when invoking the two from the arrays works just fine as per example:

int 2dArray[][];
for(int 1dArray[]: 2dArray){
    for(int i: 1dArray){
        //do stuff
    }
}
兔姬 2024-12-10 15:10:05
import java.util.LinkedList;
import java.util.Queue;

public class TwoDIterator {
int[][] array;
int outerCursor;
int lastArrayLen;
int totalElems;
int tracker = 1;
Queue<Integer> myQueue = new LinkedList<>();

public TwoDIterator(int[][] arr) {
    this.array = arr;
    this.outerCursor = 0;
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            totalElems += 1;
        }
    }
    for (int i = 0; i < array[0].length; i++) {
        myQueue.add(array[0][i]);
    }
}

public boolean hasNext() {
    return array.length > outerCursor && totalElems >= tracker;
}

public Integer next() {
    if (myQueue.isEmpty()) {
        outerCursor++;
        for (int i = 0; i < array[outerCursor].length; i++) {
            myQueue.add(array[outerCursor][i]);
        }
        if (!myQueue.isEmpty()) {
            tracker++;
            return myQueue.remove();
        }
    } else {
        tracker++;
        return myQueue.remove();
    }
    return -1;
}

public static void main(String[] args) {
    int[][] arr = { { 1, 2, 3 }, { 1, 3 }, { 1, 2, 5 } };
    TwoDIterator iter = new TwoDIterator(arr);
    while (iter.hasNext()) {
        System.out.println(iter.next());
    }
}
}
import java.util.LinkedList;
import java.util.Queue;

public class TwoDIterator {
int[][] array;
int outerCursor;
int lastArrayLen;
int totalElems;
int tracker = 1;
Queue<Integer> myQueue = new LinkedList<>();

public TwoDIterator(int[][] arr) {
    this.array = arr;
    this.outerCursor = 0;
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            totalElems += 1;
        }
    }
    for (int i = 0; i < array[0].length; i++) {
        myQueue.add(array[0][i]);
    }
}

public boolean hasNext() {
    return array.length > outerCursor && totalElems >= tracker;
}

public Integer next() {
    if (myQueue.isEmpty()) {
        outerCursor++;
        for (int i = 0; i < array[outerCursor].length; i++) {
            myQueue.add(array[outerCursor][i]);
        }
        if (!myQueue.isEmpty()) {
            tracker++;
            return myQueue.remove();
        }
    } else {
        tracker++;
        return myQueue.remove();
    }
    return -1;
}

public static void main(String[] args) {
    int[][] arr = { { 1, 2, 3 }, { 1, 3 }, { 1, 2, 5 } };
    TwoDIterator iter = new TwoDIterator(arr);
    while (iter.hasNext()) {
        System.out.println(iter.next());
    }
}
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文