我正在创建一个允许人们输入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);
}
}
}
}
当我运行我的程序时,在用户输入数字后,例如&#34; [I @ 55f96302&#34;出现。
用户输入10个整数后,线程中的异常&#34; main&#34; java.lang.ArrayIndexOutOfBoundsException:10 在EnterTenNumbers.main(EnterTenNumbers.java:13) 出现时应显示从最小到最大的数字。
发生了什么事?
答案 0 :(得分:1)
当我运行我的程序时,在用户输入数字后,这样的事情 喜欢&#34; [我@ 55f96302&#34;出现。
这是因为您正在打印数组的字符串表示形式,而不是数组的元素。
替换
System.out.println(i1);
与
System.out.println(i1[i]);
用户输入10个整数后,线程中的异常&#34; main&#34; java.lang.ArrayIndexOutOfBoundsException:10
如异常清楚地表明,您正在尝试访问第10个索引(索引从0开始)或数组的第11个元素。但是你的数组只有10个元素。这就是你获得AIOOBE
的原因。在条件语句中,当i = 9时,谓词i1 [i + 1]变为i1 [10]。你需要解决这个问题。
最后,您也可以通过以下方式实现目标:
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;
}
Arrays.stream(i1).sorted().forEach(System.out::println);
答案 1 :(得分:0)
每当您要求用户输入数字作为输入时,您将创建一个新的整数数组。 Aren你应该只创建一个数组来保存那10个整数吗?因此,在循环外声明整数数组。这样,它只会被宣布一次。
您必须从一开始就从用户那里获取所有10个整数,然后您必须对这10个整数运行操作,以便从最小到最大显示它们。
从用户获取所有10个整数并将它们保存在一个数组中后,您必须再次逐个遍历这些数字,并检查哪个数字最小,哪个数字最大。当循环检查数组的最后一个索引时,您无法检查该数组的下一个索引(因为该数组的索引不存在)。这就是你每次都有例外的原因。
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);
}