该程序应该在数组中找到Max和Min,
但它发送错误:
“线程中的异常”main“java.lang.ArrayIndexOutOfBoundsException:23
在Mine_EnhancedForLoop.main(Mine_EnhancedForLoop.java:17)“
有谁知道,问题是什么?
public class Mine_EnhancedForLoop {
public static void main(String[] args) {
int[] array1 = {23, 98, 10, 1, 45, 2, 7, 90};
int max = array1[0];
int min = array1[0];
for (int i : array1){
if (array1[i] > max)
max = array1[i];
else if (array1[i] < min)
min = array1[i];
}
System.out.println("Maximum is: " + max);
System.out.println("Minimum is: " + min);
}
}
答案 0 :(得分:6)
在for (int i : array1)
中,i
是数组中包含的值,而不是数组的索引。因此,array1[i]
将抛出i >= array1.length
时出现的异常(对于输入数组中的大多数值都是如此)。
如果您不需要知道最高和最低值的索引,这将有效:
for (int i : array1) {
if (i > max)
max = i;
else if (i < min)
min = i;
}
答案 1 :(得分:2)
for (int i : array1)
i
给出数组的元素而不是数组的索引
所以在第一次迭代中
if(array1[23] > max) //gave you ArrayIndexOutOfBoundsException 23
你可以做到
int[] array1 = {23, 98, 10, 1, 45, 2, 7, 90};
int max = array1[0];
int min = array1[0];
int i=0;
while(i< array1.length){
if (array1[i] > max)
max = array1[i];
else if (array1[i] < min)
min = array1[i];
i++;
}
System.out.println("Maximum is: " + max);
System.out.println("Minimum is: " + min);
答案 2 :(得分:1)
您必须将数组元素迭代为:
for (int i=0; i<array1.length; i++){
if (array1[i] > max)
max = array1[i];
else if (array1[i] < min)
min = array1[i];
}
答案 3 :(得分:1)
将for循环更改为
for (int i = 0; i < array1.length; i++) {
if (array1[i] > max) {
max = array1[i];
} else if (array1[i] < min)
min = array1[i];
}
}
答案 4 :(得分:1)
因为变量i
在此处进行比较if (array1[i] > max)
时包含23,因此array1 [23]给出了异常。
在数组上循环:
for (int i = 0; i < array1.length; i++) {
if (array1[i] > max)
max = array1[i];
else if (array1[i] < min)
min = array1[i];
}
答案 5 :(得分:1)
实际上使用Java 8流要容易得多:
int[] array1 = {23, 98, 10, 1, 45, 2, 7, 90};
System.out.println("Maximum is: " + Arrays.stream(array1).max().getAsInt());
System.out.println("Minimum is: " + Arrays.stream(array1).min().getAsInt());