[英]Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException in Finding Max Element
[英]Java Finding Max Element
我正在尝试不使用而找到最大元素
import java.util.Collections
public static int maxArrayListValue(int[] arrayList) {
int maxVal = Integer.MIN_VALUE;
for (int[] qqq : arrayList) {
for (int vvv : qqq) {
if (vvv > maxVal) {
maxVal = vvv;
}
}
}
return maxVal;
}
但是我总是在for (int[] qqq : arrayList)
遇到错误
(Type mismatch: cannot convert from element type int to int[])
将其更改为“ for (int qqq : arrayList)
”之后,(int vvv:qqq)的第二个代码仍然出现错误
(Can only iterate over an array or an instance of java.lang.Iterable)
增强的for循环从提供的Collection中获取每个值并对其进行处理。
你的代码应该是:
public static int maxArrayListValue(int[] arrayList) {
int maxVal = Integer.MIN_VALUE;
for (int vvv : arrayList) {
if (vvv > maxVal) {
maxVal = vvv;
}
}
return maxVal;
}
arrayList
是一维数组,因此for (int[] qqq : arrayList)
是错误的
for (int qqq : arrayList)
尝试这个:
public static int maxArrayListValue(int[] arrayList) {
int maxVal = Integer.MIN_VALUE;
for (int qqq : arrayList) {
if(qqq > maxVal){
maxVal = qqq;
}
}
return maxVal;
}
您正在将变量qqq
声明为整数数组。
此声明不正确的原因是因为arrayList
是一维数组,这意味着它包含Integer而不是Integer的数组。
假设你希望来检查内的每个整数arrayList
中的方法参数,你就需要更换int[]
与声明int
所以,它的检查对于每个整数,而不是整数的每个阵列。
关于另一个错误,不需要嵌套for
循环。 说:
for (int vvv : qqq)
当qqq
声明为Integer时,实际上是在说“对于整数中的每个整数”,这没有意义-因此是错误。 您可以使用qqq
代替vvv
,在其中您可以根据maxVal
检查其有效性。
要解决您遇到的两个问题,请使用以下更正的方法:
public static int maxArrayListValue(int[] arrayList) {
int maxVal = Integer.MIN_VALUE;
for (int vvv : arrayList) {
if (vvv > maxVal) {
maxVal = vvv;
}
}
return maxVal;
}
尝试这个:
public static int maxArrayListValue(int[] arrayList) {
int maxVal = 0;
for (int[] i = 0; i < arrayList.length-1; i ++) {
if (arrayList[i] > maxVal) {
maxVal = vvv;
}
}
return maxVal;
}
如何使用Streams? 尽管int[]
不起作用,请考虑使用Integer[]
或直接使用List<Integer>
Arrays.asList(arrayList).stream()
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList()).get(0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.