2011-10-04 60 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 ++]。 –