我有以下Java代码。
import java.util.Arrays;
public class Cook {
public static void main(String[] args) {
int num[] = { 3, 1, 5, 2, 4 };
getMaxValue(num);
}
public static void getMaxValue(int[] num) {
int maxValue = num[0];
int getMaxIndex = 0;
for (int i = 1; i < num.length; i++) {
if (num[i] > maxValue) {
maxValue = num[i];
}
}
getMaxIndex = Arrays.asList(num).indexOf(maxValue);
System.out.println(getMaxIndex + " and " +maxValue);
}
}
在上面的代码中,我试图检索数组中的最大值及其索引,但这里我得到的输出是
-1 and 5
最大值返回正常,但不确定索引有什么问题。这实际上应该打印2
,但它正在打印-1
,请告诉我哪里出错了,我该如何解决这个问题。
Thankd
答案 0 :(得分:21)
您应该更新循环中的最大索引:
int maxValue = num[0];
int getMaxIndex = 0;
for (int i = 1; i < num.length; i++) {
if (num[i] > maxValue) {
maxValue = num[i];
getMaxIndex = i;
}
}
Arrays.asList(num).indexOf(maxValue);
返回-1
的原因是一个基元数组被Arrays.asList
转换为单个元素的List
(数组本身),而{ {1}}不包含List
(它只包含原始数组)。
答案 1 :(得分:6)
需要在迭代时更新索引,getMaxIndex = i;
public static void getMaxValue(int[] num) {
int maxValue = num[0];
int getMaxIndex = 0;
for (int i = 1; i < num.length; i++) {
if (num[i] > maxValue) {
maxValue = num[i];
getMaxIndex = i;
}
}
System.out.println(getMaxIndex + " and " + maxValue);
}
<强>输出强>
2 and 5
以下是@Eran所指的内容。
它被转换为List
size 1
,包含一个元素(数组本身)。
根据Javadoc, indexOf
返回指定元素第一次出现的索引 此列表,如果此列表不包含该元素,则返回-1。
因此,它会搜索maxValue
inside List
和not inside array stored in 0th index of List
。
答案 2 :(得分:4)
每个人都给出了很好的提示,但没有人详细解释为什么它不起作用。
Calendar c = Calendar.getInstance();
int month = c.get(Calendar.MONTH);
if (month == 0) {
do something
}
else if (month == 1) {
do something
}
使用签名Arrays.asList()
定义,该签名包含可变数量的对象或仅包含对象数组。
但是,public static <T> List<T> asList(T... a)
是基本类型而不是对象类型。所以int
不被解释为“取这个数组”,而是“把这个对象当作一个对象”。结果是Arrays.asList(num)
,其中找不到给定的数字(当然)。
因此,最好在搜索最大值时保留索引,正如其他答案已经建议的那样。
答案 3 :(得分:1)
以上答案是正确的,但您也可以
import java.util.Arrays;
public class Cook {
public static void main(String[] args) {
Integer num[] = { 3, 1, 5, 2, 4 };
getMaxValue(num);
}
public static void getMaxValue(Integer[] num) {
int maxValue = Arrays.asList(num).get(0);
int getMaxIndex = 0;
for (int i = 1; i < num.length; i++) {
if (Arrays.asList(num).get(i) > maxValue) {
maxValue = Arrays.asList(num).get(i);
}
}
getMaxIndex = Arrays.asList(num).indexOf(maxValue);
System.out.println(getMaxIndex + " and " +maxValue);
}
}