2011-09-10 35 views
1

你可以创建一个迭代器来跨越二维数组中的所有空间吗?你能通过2d数组创建一个Java Iterator吗?

+6

[你尝试过什么?](HTTP:// mattgemmell .com/2008/12/08/what-you-you-tried) –

+0

@Brian - 这是一个很好的链接! –

+0

是的 - 我看到有人用这种方式在这里使用它,现在我已经采用了它。我认为这不是咆哮或过于苛刻就能解释问题。 –

回答

2

是的,将数组包装在一个对象中并使该对象实现迭代器接口。所以它可以做到。我不知道这个Jdk附带的迭代器。

1

是的,可以这样做,正如@Scorpion所说。事实上,解决方案可能非常简单:不超过10行的可执行代码......如果我正确理解问题。

不,在JDK中没有一种方便的方法来做到这一点。而且我不知道任何一个“公共”图书馆都有。 (原因:这个特殊的问题太专业了,不适合少数程序员使用)。

这应该是你自己去实现解决方案的充分答案。


我应该/我们为您提供盆栽解决方案吗?海事组织,没有。

  • StackOverflow不是“我们免费写你的代码”服务。

  • 如果您自己动手,您将会了解更多:请阅读优秀的"What have you tried?"博客文章。

(即使有人也觉得自己写的代码,你没有给这个问题的足够清晰的描述来实现......没有赚很多的猜测。)

1

我不认为有必要使调用两个来自阵列时,一个迭代器工作得很好按例如:

int 2dArray[][]; 
for(int 1dArray[]: 2dArray){ 
    for(int i: 1dArray){ 
     //do stuff 
    } 
} 
0
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()); 
    } 
} 
} 
+0

请详细说明您的问题。 – UmarZaii

相关问题