获取数组中对象的索引

时间:2014-05-31 00:08:57

标签: java arrays indexof

我试图找到我的数组中每个对象的索引。

   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)方法是否正确? (好吧,我显然不是因为输出不正确。

3 个答案:

答案 0 :(得分: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);

        }

    }

}

答案 1 :(得分:0)

让我们来看看代码的作用:

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

创建一个包含正好1 元素的列表:ma[x]

也许您正在尝试这样做,以创建数组Monster中所有ma的列表:

java.util.Arrays.asList(ma)

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

这会尝试在列表中找到Integer。 (自动装箱循环变量)。这显然会返回-1,因为列表中没有Integer s(仅Monster s)。

要获得结果!= -1,您必须将Monster作为参数传递给indexOf,例如像这样的东西:

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

(将返回x btw。,如果你使用我上面的两个修改并且你的怪物都不相等(使用equals)并且equals是反身的,情况就是这样如果你不覆盖它)

答案 2 :(得分:0)

问题在于:

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

您正在指定一个索引,您不应该在asList方法的参数中。相反,试试这个:

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