Получить индекс объектов в массиве

1

Я пытаюсь найти индекс каждого объекта в моем массиве.

   public class MonsterTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Monster [] ma = new Monster[3];
        ma[0] = new Vampire();
        ma[1] = new Dragon();
        ma[2] = new Monster();
        for(int x = 0; x < 3; x++) {
            System.out.println(ma[x].getClass());
            System.out.println(java.util.Arrays.asList(ma[x]).indexOf(x));
            ma[x].frighten(x);

        }

    }

}

Я использую метод java.util.Arrays.asList(ARRAY).indexOf(element) здесь правильно? (Ну, я, очевидно, не потому, что вывод неверен.

  • 0
    Что делает Arrays.asList(..) ? Что делает indexOf(..) ? (Пойти посмотреть.)
Теги:
arrays
indexof

3 ответа

1

У вас уже есть это - это x. Вам не нужно использовать такие конкретные функции, чтобы получить то, что у вас уже есть.

public class MonsterTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Monster [] ma = new Monster[3];
        ma[0] = new Vampire();
        ma[1] = new Dragon();
        ma[2] = new Monster();
        for(int x = 0; x < 3; x++) {
            System.out.println(ma[x].getClass());
            System.out.println(x);
            ma[x].frighten(x);

        }

    }

}
0

Проблема здесь:

System.out.println(java.util.Arrays.asList(ma[x]).indexOf(x));

Вы указываете индекс, в котором вы не должны указывать параметр asList. Вместо этого попробуйте следующее:

System.out.println(java.util.Arrays.asList(ma).indexOf(x));
  • 0
    Это приводит к тому же результату.
  • 0
    Да, потому что вы правильно указали список в качестве аргумента ma , но ищите индекс объекта типа Integer, а не типа Monster. Если вы хотите использовать этот подход, используйте System.out.println(java.util.Arrays.asList(ma).indexOf(ma[x]));
0

Давайте посмотрим, что делает ваш код:

java.util.Arrays.asList(ma[x])

создает список, содержащий ровно 1 элемент: ma[x].

Возможно, вы пытаетесь сделать это вместо этого, чтобы создать список всех Monster в массиве ma:

java.util.Arrays.asList(ma)

/*...*/.indexOf(x)

Это пытается найти Integer в списке. (автоматический бокс вашей переменной цикла). Это, очевидно, возвращает -1 поскольку в списке нет Integer (только Monster s).

Чтобы получить результат! = -1, вы должны передать Monster качестве аргумента indexOf, например, что-то вроде этого:

/*...*/.indexOf(ma[x])

(который вернет x btw., если вы используете мои обе модификации выше, и ни один из ваших монстров не будет равен (с использованием equals), а equals будет рефлексивным, что имеет место, если вы не переопределите его)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню