Java数组对象和空指针异常的问题

问题要求:
创建若干个学生对象,输入学生的姓名、学号、成绩,并将学生信息打印
报错代码

        Scanner scanner = new Scanner(System.in);
        System.out.println("输入多少个学生的信息?");
        Student[] students = new Student[scanner.nextInt()];
        for (int i = 0; i < students.length; i++) {
            //输入学生的姓名、学号、成绩
            System.out.println("输入第"+(i+1)+"个学生的信息");
            
            System.out.print("输入姓名");
            students[i].setName(scanner.next());
            System.out.print("输入id");
            students[i].setId(scanner.nextInt());
            System.out.print("输入成绩");
            students[i].setScore(scanner.nextInt());
        }
        for (int i = 0; i < students.length; i++) {
            System.out.println(students[i].toString());
        }

以上代码输运行完输入姓名之后会报空指针异常,其原因在于我们虽然创建了对象数组,但是没有对其进行了初始化。

注意: 这里只是给对象数组进行了初始化,并没有对该对象进行初始化。
例如:

Student[] students=new Student[10];

students 是对象数组名,它所表示该数组中一共有10个元素,每一个元素都是Student类的对象名,只是对象名,并没有实例化,所以还必须为每一个元素实例化。

在上面的代码中没有对每一个元素进行实例化,你没有实例化就没有自己的内存空间,没有私人空间干啥都不好干嘛!所以这个对象就开始罢工,先给你来一手空指针异常,对象嘛,是要哄的,哄着哄着不就好了,你要声明我就给你声明,你要私人空间我就给你空间嘛,当然了,这里有十个对象,怎么着也得雨露均沾!要不然但凡有一个闹起来就不好受了


修改后的代码

for (int i = 0; i < students.length; i++) {
            //输入学生的姓名、学号、成绩
            System.out.println("输入第"+(i+1)+"个学生的信息");
            students[i] = new Student();
            System.out.print("输入姓名");
            students[i].setName(scanner.next());
            System.out.print("输入id");
            students[i].setId(scanner.nextInt());
            System.out.print("输入成绩");
            students[i].setScore(scanner.nextInt());

        }
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
空指针异常(NullPointerException)通常是因为尝试访问 null 对象的某个属性或方法而引起的。在 Java 中,当尝试在 null 对象上调用实例方法或获取实例变量时,会出现空指针异常。 在删除 java 数组中排在前面的元素后,如果再比较最大值,可能会访问已经被删除的元素,从而导致空指针异常。 解决这个问题,你可以在删除元素后及时更新最大值。示例代码如下: ```java int[] arr = {2, 6, 1, 8, 4}; int max = arr[0]; // 删除第一个元素 for (int i = 1; i < arr.length; i++) { if (arr[i] > max) { max = arr[i]; } } System.out.println("最大值为:" + max); ``` 在这个例子中,我们首先设置 max 的值为数组中的第一个元素。然后遍历数组中的其他元素,如果该元素比 max 大,就更新 max 的值。这样,在删除第一个元素后,仍然可以正确输出最大值。 另外,你也可以使用数组拷贝的方式来实现删除 java 数组中的元素,避免出现空指针异常。具体的做法可以参考以下示例代码: ```java int[] arr = {2, 6, 1, 8, 4}; int[] newArr = new int[arr.length - 1]; // 复制除第一个元素以外的其他元素 System.arraycopy(arr, 1, newArr, 0, newArr.length); int max = newArr[0]; // 求最大值 for (int i = 1; i < newArr.length; i++) { if (newArr[i] > max) { max = newArr[i]; } } System.out.println("最大值为:" + max); ``` 在这个例子中,我们使用 System.arraycopy() 方法将原数组中除第一个元素以外的其他元素拷贝到新数组中,并且将新数组作为遍历的目标数组。这样,就可以避免删除元素后出现空指针异常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值