簡體   English   中英

您可以在二維數組上創建Java迭代器嗎?

[英]Can you create a Java Iterator over a 2d array?

您是否可以創建一個將遍歷二維數組中所有空間的迭代器?

如果實現Iterable接口,則可以使用for-each loop 相關示例可以在此處找到。

是的,將數組包裝在一個對象中,並使該對象實現迭代器接口。 這樣就可以了。 我不知道Jdk隨附的任何此類迭代器。

我不認為從數組調用兩個迭代器時需要制作單個迭代器,按示例所示就可以了:

int 2dArray[][];
for(int 1dArray[]: 2dArray){
    for(int i: 1dArray){
        //do stuff
    }
}

是的,可以做到,正如@Scorpion所說。 實際上,解決方案可能非常簡單:如果我正確理解問題,則可執行代碼不超過10行。

不,JDK中沒有方便的方法可以做到這一點。 而且我不知道任何“常見”庫中的一個。 (原因:這個特殊的問題過於專業化,無法對少數程序員有用。)

對於您自己實施解決方案,這應該是一個足夠的答案。


我/我們是否應該為您提供盆栽解決方案? 海事組織,不。

  • StackOverflow不是“我們免費編寫代碼”服務。

  • 如果您自己做,則將學到更多:閱讀出色的“您嘗試了什么?” 博客文章。

(即使有人確實想為您編寫代碼,您也沒有給出足夠清晰的描述來實施該問題……而無需進行大量猜測。)

import java.util.LinkedList;
import java.util.Queue;

public class TwoDIterator {
int[][] array;
int outerCursor;
int lastArrayLen;
int totalElems;
int tracker = 1;
Queue<Integer> myQueue = new LinkedList<>();

public TwoDIterator(int[][] arr) {
    this.array = arr;
    this.outerCursor = 0;
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            totalElems += 1;
        }
    }
    for (int i = 0; i < array[0].length; i++) {
        myQueue.add(array[0][i]);
    }
}

public boolean hasNext() {
    return array.length > outerCursor && totalElems >= tracker;
}

public Integer next() {
    if (myQueue.isEmpty()) {
        outerCursor++;
        for (int i = 0; i < array[outerCursor].length; i++) {
            myQueue.add(array[outerCursor][i]);
        }
        if (!myQueue.isEmpty()) {
            tracker++;
            return myQueue.remove();
        }
    } else {
        tracker++;
        return myQueue.remove();
    }
    return -1;
}

public static void main(String[] args) {
    int[][] arr = { { 1, 2, 3 }, { 1, 3 }, { 1, 2, 5 } };
    TwoDIterator iter = new TwoDIterator(arr);
    while (iter.hasNext()) {
        System.out.println(iter.next());
    }
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM