[英]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.