免责声明:这是一项家庭作业。
我目前正在进行一项任务,我需要实现一个可迭代的接口,以便从一个正方形的二维数组中传递每个数组。这个数组应该代表一个数字网格(所以我将它们称为[row] [col])。我的问题是我想使用相同的下一个方法迭代行和列。首先,这可能吗?第二,有任何建议/提示吗?
我的下一个方法目前看起来像这样:
public Data[] next(){
Data [] holder = new Data[ray.length];
for (int i = 0; i <ray.length; i++)
holder[i]=ray[counter][i];
counter++;
return holder;}
编辑:我知道能够在光线[计数器] [i]中切换计数器和我,但我不知道如果可能的话,如何做到这两点。
ray是多维数组,count是我创建的Iterator方法的一个属性(它被初始化为0,这是唯一改变它的方法)。我知道我不能以这种方式返回光线的“列”,那么我将如何进行下一个调用列和行?感谢您的任何帮助。如果你有进一步的问题,我会站在旁边。
答案 0 :(得分:1)
我的问题是我想使用相同的下一个方法来遍历行和列。首先,这可能吗?
是的,有可能,假设你的意思是我的意思。 (短语“遍历行和列”是非常模糊的。)
由于这是一项家庭作业,所以这里有几点提示:
您需要两个计数器而不是一个。
当你到达一行的末尾时,你需要转到下一行的开头。 (显然!)如果你有两个柜台,想想这意味着什么。
这足以让你走上正轨。
我想要逐行迭代和逐列迭代。
这也是一个非常含糊不清的描述,但我要解释它意味着有时你想要从左到右和从上到下迭代,有时你想要迭代顶部从下到上。
这也是可能的:
一种可能性是使用额外的状态变量来告诉迭代器你正在迭代哪个方向;即列内的行或行内的列。
另一种可能性是为两个方向实施两个不同的Iterator
类。
问题是迭代器类只应该有一个计数器并返回一维数组。
你(最后)明确告诉我们迭代器假设返回一个数组。 (一个好牙医可以比这更快拔出牙齿!)
所以这是一个提示:
i
行非常简单,但是返回j
列需要您创建一个新数组来保存该列中的值。答案 1 :(得分:0)
我的建议是:将2d数组转换为列表并进行迭代。
初始化Iterator时,转换列表。然后你可以轻松地迭代列表。
以下是p代码,您可以丰富您的作业中的实现。希望它能帮到你!
class TwoDimeIterator implements Iterator<Date> {
List transformedList = new ArrayList();
int cursor = 0;
/** transform to a list row by row.
So you could define your Iterator order.**/
TwoDimeIterator(){
for(int i=0; i < ray.length; i++)
for(int j=0; j < ray[0].length; j++)
transformedList.add(ray[i][j]);
}
public Date next() {
return transformedList.get(cursor++);
}
public boolean hasNext() {
return cursor != transformedList.size();
}
//...
}