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



免责声明:这是家庭作业

我目前正在工作的分配,我需要实现一个可迭代的接口,以便从一个正方形二维数组传递每个数组。这个数组应该表示一个数字网格(所以我将把它们称为[row][col])。我的问题是,我想使用相同的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]中切换计数器和I,但我不确定如何让它两者都做,如果这是可能的。

ray是多维数组,count是我创建的Iterator方法的一个属性(它被初始化为0,这是唯一改变它的方法)。我知道我不能以这种方式返回ray的"列",那么我该如何进行下一次调用列和行呢?谢谢你的帮助。如果你还有问题,我随时待命。

我的问题是,我想使用相同的next方法遍历行和列。首先,这可能吗?

是的,这是可能的,假设你的意思是我认为你的意思。(短语"遍历行和列"是非常模糊的。)

由于这是一个家庭作业,这里有一些提示:

  • 你需要两个计数器而不是一个。

  • 当你到达一行的末尾时,你需要转到下一行的开始。(当然!)想想如果你有两个计数器,这意味着什么。

这应该足以让你走上正确的轨道。


我想要逐行迭代和逐列迭代。

这也是一个可怕的模棱两可的描述,但我要把它解释为有时你想从左到右、从上到下迭代,有时你想从上到下、从左到右迭代。

也可以:

  • 一种可能是使用一个额外的状态变量来告诉迭代器你在迭代哪个方向;即行中列,或列中行。

  • 另一种可能性是为两个方向实现两个不同的Iterator类。


问题在于迭代器类应该只有一个计数器,并返回一个一维数组。

你(最后)明确地告诉我们,迭代器应该返回一个数组。(一个好的牙医可以比这更快地拔牙!)

这里有个提示:

  • 返回i的第一行很容易,但是返回j的第列需要创建一个新的数组来保存该列中的值。

我的建议是:将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();
    }
//...
}

相关内容

最新更新