2301_80032038 2024-06-26 00:00 采纳率: 89.3%
浏览 4

java学生系统数组添加学生出错


public class Main {
    public static void main(String[] args) {

        student[] students = {
                new student("heima1001", "张三", 18),
                new student("heima1002", "李四", 19),
                new student("heima1003", "王五", 20)
        };

        student.addStudent(students, "heima1004", "赵六", 21);

        student.printStudents(students);

        student.removeStudentByID(students, "heima1002");

        student.printStudents(students);

        student.updateStudentAge(students, "heima1001", 19);

        student.printStudents(students);
    }
}

public class student {

    private String id;
    private String name;
    private int age;


    public student(){}

    public student(String id, String name, int age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }

        public String getId() {
            return id;
        }

        public String getName() {
            return name;
        }

        public int getAge()  {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static void addStudent(student[] students, String id, String name, int age) {
        for (student s : students) {
            if (s.getId().equals(id)) {
                System.out.println("学号已存在,无法添加");
                return;
            }
        }
        students[students.length] = new student(id, name, age);
    }

    public static void printStudents(student[] students) {
        System.out.println("学生信息:");
        for (student s : students) {
            System.out.printf("学号: %s, 姓名: %s, 年龄: %d%n", s.getId(), s.getName(), s.getAge());
        }
    }

    public static boolean removeStudentByID(student[] students, String id) {
        for (int i = 0; i < students.length; i++) {
            if (students[i].getId().equals(id)) {
                System.arraycopy(students, i + 1, students, i, students.length - i - 1);
                students[students.length - 1] = null;
                return true;
            }
        }
        System.out.println("找不到该学生,删除失败");
        return false;
    }

    public static void updateStudentAge(student[] students, String id, int newAge) {
        for (student s : students) {
            if (s.getId().equals(id)) {
                s.setAge(newAge);
                break;
            }
        }
    }
}

img


为什么会出现这个错误呢?这个需要怎么改正呀?

  • 写回答

1条回答 默认 最新

  • 阿里嘎多学长 2024-06-26 08:37
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    你好!根据你提供的代码和错误信息,我可以帮你分析一下问题所在。

    首先,错误信息提示在student.addStudent方法的调用处,位于student.java的第39行,这表明在执行addStudent方法时发生了异常。具体来说,是因为在尝试将新学生添加到数组时,数组越界了。

    问题原因:addStudent方法中,你试图将新创建的student对象赋值给students[students.length],但是这个索引已经超出了数组的当前长度。在Java中,数组索引是从0开始的,所以数组的最大有效索引是students.length - 1

    解决方案:

    1. 检查数组是否已满:在添加新学生之前,你需要检查数组是否还有空间。如果没有空间,你可能需要创建一个新的、更大的数组来存储学生信息。
    2. 正确添加元素:如果数组还有空间,你应该将新学生添加到数组的最后一个有效位置,即students[students.length - 1]

    下面是修改后的addStudent方法的示例代码:

    public static void addStudent(student[] students, String id, String name, int age) {
        for (student s : students) {
            if (s.getId().equals(id)) {
                System.out.println("学号已存在,无法添加");
                return;
            }
        }
        // 检查数组是否已满
        if (students.length == 0 || students[students.length - 1] != null) {
            // 如果数组已满,需要扩容
            student[] newStudents = new student[students.length + 1];
            System.arraycopy(students, 0, newStudents, 0, students.length);
            students = newStudents; // 更新引用
        }
        // 添加新学生到数组的最后一个位置
        students[students.length - 1] = new student(id, name, age);
    }
    

    请注意,这段代码假设students数组最初是空的或者至少有一个元素。如果数组是空的,你可能需要初始化它,例如student[] students = new student[1];

    希望这能帮助你解决问题!如果你还有其他问题或需要进一步的帮助,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月26日