gpt4 book ai didi

java - 如何从 Java 中的常规数组创建迭代器?

转载 作者:行者123 更新时间:2023-12-02 04:26:46 25 4
gpt4 key购买 nike

public class TileGrid implements Iterable<Tile> {
private wheelSize = [a positive integer];
private Tile[][] grid = new Tile[wheelSize * 2 + 1][wheelSize * 2 + 1]

@Override
public Iterator<Tile> iterator() {
return ????????;
}
}

我创建了一个 TileGrid 类来为我跟踪六角网格。它将Tile对象存储在一个名为grid的二维数组中。现在我想让 TileGridIterable 以便我可以轻松地循环所有 Tile 对象。问题是数组中的某些位置自然不会被使用(由于六角网格的形状),因此包含值 null

我的问题是:如何创建一个迭代器来迭代 grid 中除 null 之外的所有位置?

我不想使用某种 ArrayList,因为我使用数组索引来标记 Tiles 的位置。

最佳答案

您必须返回 Iterator 类的实现的实例。您返回的迭代器应该能够访问您的数组,以便代码有意义。( http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html )

public Iterator<Tile> iterator() {
return new TileGridIterator(grid);
}

这意味着您需要编写一个实现迭代器接口(interface)的类,并实现该接口(interface)的 API 中指定的所有方法。

一个例子可能如下所示:

import java.util.Iterator;
import java.util.NoSuchElementException;

public class TileGridIterator implements Iterator<Tile> {
int x = 0;
int y = 0;
int nextX = 0;
int nextY = -1;
Tile[][] grid;

public TileGridIterator(Tile[][] grid) {
this.grid = grid;
}

public boolean hasNext() {
while(nextX <= x && nextY < y) {
nextY++;
if(nextY == grid[nextX].length) {
nextY = 0;
nextX++;
}
if(nextX >= grid.length) {
return false;
}
if(grid[nextX][nextY] != null) {
return true;
}
}
if(nextX < grid.length && nextY < grid[nextX].length && grid[nextX][nextY] != null) {
return true;
}
else {
return false;
}
}

public Tile next() {
if(hasNext()) {
x = nextX;
y = nextY;
return grid[x][y];
}else {
throw new NoSuchElementException("no more elements left");
}
}
}

ps:感谢您的提问,这对我来说是一项有趣的任务。

关于java - 如何从 Java 中的常规数组创建迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32056088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com