可迭代/多维数组的下一个方法问题

3

免责声明:这是一份作业。

我目前正在完成一个任务,需要实现一个可迭代的接口,以便传递来自一个二维数组的每个数组。该数组应该表示一个数字网格(因此我将称之为[row][col])。我的问题是,我想使用相同的next方法迭代行和列。首先,这是否可能?其次,有什么建议/提示吗?

我的next方法目前看起来像这样:

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;}

编辑:我知道可以在ray[counter][i]中切换counter和i,但如果可能的话,我不确定如何同时执行两者。

ray是多维数组,count是我创建的Iterator方法的属性(它被初始化为0,这是唯一改变它的方法)。我知道我不能以这种方式返回ray的“列”,那么我该怎么做才能让next调用列和行?谢谢任何帮助。如果您有进一步的问题,我会随时待命。


1
重点是你想要什么顺序?逐行迭代吗? - 卢声远 Shengyuan Lu
我想要逐行迭代和逐列迭代。 - user527179
2个回答

1
我的问题是我想使用相同的next方法来迭代行和列。首先,这可能吗?
是的,假设你的意思是我所认为的那样。(“迭代行和列”这个短语非常模糊。)
由于这是一项作业练习,以下是一些提示:
- 你需要两个计数器而不是一个。 - 当你到达一行的末尾时,你需要转到下一行的开头。(显然!)考虑一下如果你有两个计数器会发生什么。
这应该足以让你走上正确的轨道。
我想要逐行迭代和逐列迭代。
这也是一个非常模糊的描述,但我将其解释为有时您想从左到右和从上到下迭代,而其他时候您想从上到下和从左到右迭代。
这也是可能的:
一种可能性是使用额外的状态变量告诉迭代器您正在迭代的方向;即在列内的行,或在行内的列。
另一种可能性是为两个方向实现两个不同的迭代器类。
问题在于迭代器类只应该有一个计数器并返回单维数组。
你(终于)明确告诉我们迭代器应该返回一个数组。(好牙医可以比这更快地拔出一颗牙!)
所以这里有一个提示:
  • 返回第i行很容易,但是返回第j列需要你创建一个新的数组来保存该列中的值。

我意识到存在歧义,并对此深表歉意。整个任务相当模糊不清。问题在于迭代器类只应该有一个计数器并返回单维数组。我已经为原始问题添加了一个新的想法。我不确定如何使下一个方法返回ray [i] [col]和ray [row] [i](假设i是某个计数器)。 - user527179
@user527179 - 如果任务确实存在歧义,你应该要么1)与设置它的人解决这个歧义,要么2)合理猜测其含义。在后一种情况下,应该明确无歧义地告诉我们您想要做些什么。不要把责任推给别人... - Stephen C
@user527179 - 注意:我对你要求严格,因为你需要明白你工作的一个重要部分是 1)明确无歧义地沟通和2)解决看似或实际上存在的需求/规格模糊之处。现在开始学习这些技能是个好时机。 - Stephen C

0
我的建议是:将二维数组转换为列表并进行迭代。
在初始化迭代器时,将列表转换。然后,您可以轻松地对列表进行迭代。
以下是伪代码,您可以在作业中完善实现。希望对你有帮助!
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();
    }

//...
}

需要返回一个数组,而不是 ArrayList,但还是谢谢你的建议! - user527179
@user527179:忘记转换,保留光标并返回数组:ray[cursor++]。 - 卢声远 Shengyuan Lu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接