首页 文章

为何不应该[重复]抛出异常

提问于
浏览
-4

这个问题在这里已有答案:

我正在创建一个允许人们输入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 回答

  • 1

    当我运行程序时,在用户输入数字后,会出现“[I @ 55f96302”这样的内容 .

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

    更换

    System.out.println(i1);

    System.out.println(i1[i]);

    并且在用户输入10个整数后,线程“main”中的异常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);
    
  • 0
    • 每次要求用户输入数字作为输入时,您将创建一个新的整数数组 . 难道你不应该只创建一个数组来保存这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);
    }
    

相关问题