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