2011-10-04 62 views
3

免责声明:这是一项家庭作业。迭代/多维数组下一个方法问题

我目前正在做一个任务,我需要实现一个可迭代的接口,以便从一个正方形的二维数组传递每个数组。这个数组应该表示一个数字的网格(所以我会将它们称为[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,这是更改它的唯一方法)。我知道我不能以这种方式返回ray的“列”,那么我将如何去处理下一个调用列和行?感谢任何帮助。如果您还有其他问题,我会站在旁边。

+1

问题是你想要什么订单?逐行迭代? –

+0

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

回答

1

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

是的,这是可能的,假设你的意思是我的意思。 (短语“通过行迭代,列”是可怕的暧昧。)

因为这是这里的课外练习是一对夫妇的提示:

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

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

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


我想通过行迭代行,并通过柱迭代列。

这也是一个可怕的模棱两可的描述,但我要解释为意味着有时要遍历从左到右,从上到下,并且要重复顶部向底部其他时间并从左到右。

这也是可能的:

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

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


的问题是,迭代器类仅应该有一个计数器,并返回一个一维数组。

你(终于)告诉我们明确地迭代器是应该返回数组。 (!好的牙医可以拉出来一个齿比快)

所以这里有一个提示:

  • 返还i个行很容易,但返回j列要求你创建一个新的数组保存该列中的值。
+0

我意识到它的含糊性并对此表示歉意。这项任务的完整性很模糊。问题是迭代器类只能有一个计数器并返回一维数组。我为原始问题添加了一个新的想法。我不知道我会如何让下一个方法返回ray [i] [col]和ray [row] [i](假设我是某个计数器)。 – user527179

+0

@ user527179 - 如果分配确实不明确,您应该1)解决设置它的人的模糊性,或者2)合理地猜测它的含义。在后一种情况下,*你*应该告诉我们*你明确地试图做什么。不要把责任归咎于别人... –

+0

@ user527179 - 注意:我在这方面对你很难,因为你需要明白你的工作的一个重要部分是1)明确沟通,2)圆满地解决交付给您的要求/规范中明显或实际的含糊不清。现在是开始学习这些技能的好时机。 –

0

我的建议是:二维数组转换成一个列表和迭代。

当初始化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(); 
    } 

//... 
} 
+0

它需要返回一个数组,而不是一个ArrayList,但感谢您的建议! – user527179

+0

@ user527179:忘记转换,保持游标并返回数组:ray [cursor ++]。 –