关于java:为什么不应该抛出异常

why the exception is thrown when it should not

本问题已经有最佳答案,请猛点这里访问。

我正在创建一个程序,让人们输入10个整数,并从最小到最大显示它们。这是我的计划:

导入java.util.scanner;

公共类输入数字{公共静态void main(string[]args){

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    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在SaltNo.No.Eng.(SaltNo.java:13)显示,但应显示从最小到最大的数字。

怎么搞的?


When I run my program, after the user input the numbers, such things
like"[I@55f96302" appear.

这是因为打印的是数组的字符串表示形式,而不是数组的元素。

更换

System.out.println(i1);

具有

江户十一〔一〕号

And after the user entered 10 integers, Exception in thread"main"
java.lang.ArrayIndexOutOfBoundsException: 10

正如异常明确指出的那样,您正试图访问数组的第10个索引(索引从0开始)或第11个元素。但您的数组只有10个元素。这就是为什么你得到了AIOOBE。在条件语句中,当i=9时,谓词i1[i+1]变为i1[10]。你需要解决这个问题。

最后,你也可以通过以下方式实现你的目标:

1
2
3
4
5
6
7
8
9
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);


  • 每次请求用户提供一个数字作为输入时,都会创建一个新的整数数组。你不应该只创建一个数组来保存这10个整数吗?所以,在循环外部声明整型数组。这样,它将只声明一次。

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

  • 在从用户那里取出所有10个整数并将它们保存在一个数组中之后,您必须在这些数字中逐个循环,并检查哪个数字最小,哪个数字最大。当循环检查数组的最后一个索引时,不能检查该数组的下一个索引(因为该数组的索引不存在)。这就是为什么你每次都有例外。

    1
    2
    3
    4
    5
    6
    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);
    }