Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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 int数组元素的索引_Java - Fatal编程技术网

Java int数组元素的索引

Java int数组元素的索引,java,Java,我有这段代码是为了在数组中查找3个元素的indexOf,所以我使用了java.util。。等等,但它告诉我,我错了,结果是-1,如何避免这个错误的答案,还有没有其他方法来编写这个代码 int array [] = {1,0,1,0,0,1,1,0,1,1}; for(int counter = 0 ; counter < 3; counter++) System.out.printf("%5d%8d\n",java.util.Arrays.asList(array).

我有这段代码是为了在数组中查找3个元素的indexOf,所以我使用了java.util。。等等,但它告诉我,我错了,结果是-1,如何避免这个错误的答案,还有没有其他方法来编写这个代码

int array [] = {1,0,1,0,0,1,1,0,1,1};
for(int counter = 0 ; counter < 3; counter++)
    System.out.printf("%5d%8d\n",java.util.Arrays.asList(array).
        indexOf(array[randomNumbers.nextInt(10)]),array[randomNumbers.nextInt(10)]);

您必须使用int的包装类

    SecureRandom randomNumbers = new SecureRandom();

    Integer array[] = { 1, 0, 1, 0, 0, 1, 1, 0, 1, 1 };
    for (int counter = 0; counter < 3; counter++)
        System.out.printf("%5d%8d\n", java.util.Arrays.asList(array).indexOf(array[randomNumbers.nextInt(10)]), array[randomNumbers.nextInt(10)]);
编辑日期:2014年3月2日

嗨,我的第一个答案是错的,请检查新答案:

SecureRandom randomNumbers = new SecureRandom();

/**
 * I don't know why but when you create an array with only primitive
 * contained "unnamed block" like "Integer array[] = {1,0,1}". JVM
 * associate same referance variables with same values like "Integer
 * array[] = {@34, @554, @34}". That is why i use "new Integer"
 * constractor for each integer as follows:
 */
Integer array[] = new Integer[] { new Integer(1), new Integer(0),
        new Integer(1), new Integer(0), new Integer(0), new Integer(1),
        new Integer(1), new Integer(0), new Integer(1), new Integer(1) };

int ran, i;
for (int counter = 0; counter < 3; counter++) {
    ran = randomNumbers.nextInt(10);
    i = 0;
    /**
     * "List.indexOf" method uses "object1.equals(object2)" method, this
     * method compares "values" of wrapper classes, but in your case
     * we have to compare referances, so with nested "for" loops we
     * check that:
     */
    for (Integer integer : array) {
        if (integer == array[ran]) { // "==" operator checks referances is same
            System.out.printf("%5d%8d\n", i, ran);
            break;
        }
        i++;
    }
}

我不确定是否得到了答案,但请尝试将代码分解为可读的行。原始数组应该是整数[],而不是int[]

请注意,Arrays.asListint[]创建了一个列表

这可能会有所帮助。

问题在于int[]数组本身,因为当您使用任何基元数组并使用Arrays.asList将其转换为列表时,它将返回一个列表而不是列表,因此代码会出现问题。解析整数包装类的创建数组

代码失败的原因:

这是相关的:

在int[]上调用Arrays.asList。这不会产生预期的结果,因为Arrays.asList用于处理对象数组,而不是基本体。结果是一个元素的列表,该元素是int[]数组,因为与任何其他数组一样,原语数组也是对象

解决办法:

你已经知道你的索引了。你正在设置它。不用查了。将其保存在变量中。我喜欢短代码,但有时短代码比稍长的代码更糟糕,运行速度也慢。NBD,如果你没有把整个程序放在一行上-或- 如果您仍然认为需要索引查找,请使用integer对象数组integer[]。
因为当你以…indexOfarray[randomNumbers.nextInt10]的形式传递时,“int”自动转换为整数。这个新的Integer对象与您之前添加的不同。不,实际上,问题在于调用数组。在原语数组上的列表请参见@trutheality我的第一个答案是错误的;检查新的!如果将randomNumbers.nextin10带入变量,甚至不需要使用List.indexOf。@NandkumarTekale我认为这个练习的目的是使用List.indexOf。您的编辑更改了我的答案。@vegemite4me:我应该双向保留。对不起,我把它留回来了:
    Random randomNumbers = new Random();

    Integer array [] = {1,0,1,0,0,1,1,0,1,1};
    for(int counter = 0 ; counter < 3; counter++)
    {
        int randomItemFromArray = array[randomNumbers.nextInt(10)];
        List<Integer> listOfInts = Arrays.asList(array);
        int indexOfRandomItem = listOfInts.indexOf(randomItemFromArray);

        System.out.printf("%5d%8d\n", indexOfRandomItem , randomItemFromArray);
    }
Integer[] array  = {1,0,1,0,0,1,1,0,1,1};