这个问题在这里已有答案:
我正在创建一个允许人们输入10个整数并从最小到最大显示它们的程序 . 这是我的计划:
import java.util.Scanner;
public class EnterTenNumbers {public static void main(String [] args){
System.out.println("Enter 10 numbers");
int small=0;
for(int i=0; i<10; i++){
Scanner in=new Scanner(System.in);
int[] i1=new int[10];
int num=in.nextInt();
i1[i]=num;
if(i1[i]<i1[i+1] || i1[i]==i1[i+1]){
System.out.println(i1);
}else if(i1[i]>i1[i+1]){
i1[i+1]=i1[i];
System.out.println(i1);
}
}
}
}
当我运行程序时,在用户输入数字后,出现“[I @ 55f96302”这样的内容 .
并且在用户输入10个整数后,出现线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:10,在EnterTenNumbers.main(EnterTenNumbers.java:13),同时它应显示从最小到最大的数字 .
发生了什么?
2 回答
这是因为您正在打印数组的字符串表示形式,而不是数组的元素 .
更换
System.out.println(i1);
同
System.out.println(i1[i]);
正如异常清楚地表明的那样,您正在尝试访问第10个索引(索引从0开始)或数组的第11个元素 . 但是你的数组只有10个元素 . 这就是为什么你得到
AIOOBE
. 在条件语句中,当i = 9时,谓词i1 [i 1]变为i1 [10] . 你需要解决这个问题 .最后,您也可以通过以下方式实现目标:
每次要求用户输入数字作为输入时,您将创建一个新的整数数组 . 难道你不应该只创建一个数组来保存这10个整数吗?因此,在循环外声明整数数组 . 这样,它只会被声明一次 .
您必须从一开始就从用户获取所有10个整数,然后您必须对这10个整数运行操作,以便从最小到最大显示它们 .
从用户获取所有10个整数并将它们保存在一个数组中后,您必须再次逐个遍历这些数字并检查哪个数字最小,哪个数字最大 . 当循环检查数组的最后一个索引时,您无法检查该数组的下一个索引(因为该数组的索引不存在) . 这就是你每次都有例外的原因 .