Можете ли вы создать Java Iterator для 2d массива - PullRequest
1 голос
/ 10 сентября 2011

Можете ли вы создать один итератор, который будет перебирать все пробелы в 2d массиве?

Ответы [ 5 ]

3 голосов
/ 10 сентября 2011

Если вы реализуете интерфейс Iterable, вы можете использовать for-each loop. Связанные примеры можно найти здесь .

2 голосов
/ 10 сентября 2011

Да, обернуть массив в объект и заставить объект реализовать интерфейс итератора.Так что это может быть сделано.Я не знаю ни одного такого итератора, который поставляется с Jdk.

1 голос
/ 18 декабря 2012

Я не вижу необходимости делать один итератор, когда вызов двух из массивов работает просто отлично, как в примере:

int 2dArray[][];
for(int 1dArray[]: 2dArray){
    for(int i: 1dArray){
        //do stuff
    }
}
1 голос
/ 10 сентября 2011

Да, это можно сделать, как говорит @ Scorpion. На самом деле, решение, вероятно, довольно простое: не более 10 строк исполняемого кода ... если я правильно понимаю проблему.

Нет, в JDK нет удобного метода для этого. И я не знаю ни о одной из библиотек "общего достояния". (Причина: эта конкретная проблема слишком специализирована, чтобы быть полезной для более чем нескольких программистов.)

Это должно быть достаточным ответом, чтобы вы сами применили решение.


Должен ли я / мы предоставить вам готовое решение? ИМО, №

  • StackOverflow не является услугой «мы пишем ваш код бесплатно».

  • Если вы сделаете это сами, вы узнаете больше: прочитайте превосходную «Что вы пробовали?» статью блога.

(И даже если кому-то действительно хочется написать код для вас, вы не дадите достаточно четкого описания проблемы, которую можно реализовать ... безо всяких догадок.)

0 голосов
/ 11 августа 2017
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());
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...