Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取数组中对象的索引_Java_Arrays_Indexof - Fatal编程技术网

Java 获取数组中对象的索引

Java 获取数组中对象的索引,java,arrays,indexof,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]

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

   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);

        }

    }

}
公共类测试{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
怪物[]ma=新怪物[3];
ma[0]=新吸血鬼();
马[1]=新龙();
ma[2]=新怪物();
对于(int x=0;x<3;x++){
System.out.println(ma[x].getClass());
System.out.println(java.util.array.asList(ma[x]).indexOf(x));
ma[x].恐吓(x);
}
}
}

我在这里使用的
java.util.Arrays.asList(ARRAY.indexOf(element)
方法正确吗?(我显然不是因为输出不正确。

让我们看看您的代码的功能:

java.util.Arrays.asList(ma[x])
创建一个列表,其中正好包含1个元素:
ma[x]

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

java.util.Arrays.asList(ma)

这将尝试在列表中找到一个
整数
。(循环变量的自动装箱)。这显然会返回
-1
,因为列表中没有
整数
s(只有
怪物
s)

要获得结果!=-1,您必须将
怪物
作为参数传递给
indexOf
,例如:

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

(如果您使用我上面的两个修改,并且没有一个怪物是相等的(使用
equals
),并且
equals
是自反的,如果您不覆盖它,它将返回
x

你已经拥有了它-它是
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);

        }

    }

}
公共类测试{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
怪物[]ma=新怪物[3];
ma[0]=新吸血鬼();
马[1]=新龙();
ma[2]=新怪物();
对于(int x=0;x<3;x++){
System.out.println(ma[x].getClass());
系统输出println(x);
ma[x].恐吓(x);
}
}
}
问题在于:

System.out.println(java.util.Arrays.asList(ma[x]).indexOf(x));
您正在指定一个索引,不应在asList方法的参数中使用该索引。请尝试以下操作:

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

Arrays.asList(…)
做了什么?indexOf(…)做了什么?(去看)。这会产生相同的输出。是的,因为您正确地将列表作为参数
ma
,但要查找Integer类型而不是Monster类型的对象的索引。如果您想依赖这种方法,请使用
System.out.println(java.util.Arrays.asList(ma.indexOf(ma[x]);
System.out.println(java.util.Arrays.asList(ma).indexOf(x));