为什么不应该抛出异常

时间:2017-03-24 03:02:56

标签: java exception indexoutofboundsexception

我正在创建一个允许人们输入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) 出现时应显示从最小到最大的数字。

发生了什么事?

2 个答案:

答案 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)

  1. 每当您要求用户输入数字作为输入时,您将创建一个新的整数数组。 Aren你应该只创建一个数组来保存那10个整数吗?因此,在循环外声明整数数组。这样,它只会被宣布一次。

  2. 您必须从一开始就从用户那里获取所有10个整数,然后您必须对这10个整数运行操作,以便从最小到最大显示它们。

  3. 从用户获取所有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);
    }