Я не знаю, как решить следующую проблему: Невозможно определить аргументы типа для MyIterator <> - PullRequest
0 голосов
/ 30 апреля 2020

это мой первый вопрос здесь. Я немного поиграл и создал класс с именем MyIterator, который реализует интерфейс Iterator. Все отлично работает, когда я использую его со следующим массивом:

String u [] = {"Hello", "Whats", "Up"};
MyIterator <String> strins = new MyIterator <> (u);
    while(strins.hasNext()) {
        System.out.print(strins.next() + " ");
    }

Он отлично работает, но просто не работает, когда я использую массив Integer ..

Integer array[] [] = new Integer [3] [3];
    for (int i=0; i<3; i++) {
        for (int t=0; t<3; t++) {
            array[i] [t] = 3;
        }
    }

MyIterator <Integer> it = new MyIterator <> (array);
    while(it.hasNext()) {
        System.out.println(it.next());
    }

Вот Мои ребята из класса MyIterator:

import java.util.Iterator;
import java.util.NoSuchElementException;

public class MyIterator <E> implements Iterator <E> {

    private int i;
    private E a[];

    public MyIterator(E a[]) {
        i=0;
        this.a=a;
    }

    public boolean hasNext() {
        return i<a.length;
    }

    public E next() {
        if (!hasNext()) {
            throw new NoSuchElementException();
        } else {
            return a[i++];
        }
    }
}

В нем говорится: Невозможно определить аргументы типа для MyIterator <>

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

Если вы, ребята, видите другие вещи, которые можно улучшить, пожалуйста, скажите мне:)

1 Ответ

1 голос
/ 30 апреля 2020

Проблема в том, что вы создаете не обычный массив Integer, а вместо этого двумерный массив Integer Integer array[][]

Так что, если вы хотите выполнить итерацию по этому 2D-массиву, вы должны выполнить итерацию по внешнему массиву или Integer[]:

MyIterator <Integer[]> it = new MyIterator <> (array);

Если вы хотите итерировать внутренний массив Integer, вам нужно использовать 2 вложенных объекта MyIterator:

final MyIterator<Integer[]> it = new MyIterator<>(array);
while (it.hasNext()) {
    final MyIterator<Integer> itInner = new MyIterator<>(it.next());
    while (itInner.hasNext()) {
        System.out.println(itInner.next());
    }
}
...