如何正确删除java数组中的元素

use*_*269 1 java arrays

我有一个简单的程序,允许您通过将记录存储在数组上来添加,编辑,列出,搜索和删除记录.

我现在的问题是如何正确删除它上面的项目.这是我目前的代码.

System.out.print("Input number to delete: ");
                    delnum=scanz.nextLine();
                    intdelnum=Integer.parseInt(delnum);

 name[intdelnum]=null;
                            course[intdelnum]=null;
                            gender[intdelnum]=null;
                            school[intdelnum]=null;
Run Code Online (Sandbox Code Playgroud)

如您所见,如果我列出这个包含10个元素的数组.我设置为null的数组索引将永远保持为null.我无法在其上添加任何内容.你知道如何做到这一点的更好的方法.因此,当我在索引2处删除数组元素时,索引3处的元素将会上升.索引2?所以后来我仍然可以在我设置为null的索引上添加一个元素.

Mic*_*zek 6

你可以通过移动数组内容来手动完成,或者使用数组复制调用System.arraycopy,但你几乎肯定想要使用集合.ArrayList是一个可变数组的好选择.ArrayList.remove会让你删除索引:

ArrayList<...> name, course, gender, school;

intdelnum = Integer.parseInt(delnum);
name.remove(intdelnum);
course.remove(intdelnum);
gender.remove(intdelnum);
school.remove(intdelnum);
Run Code Online (Sandbox Code Playgroud)

关于您的代码段的其他一些随机说明:

我假设scanz是扫描仪.您可以调用nextInt()它而不是使用nextLine()String并将其转换为int.

您可能还想创建一个包含所有信息的类,而不是使用四个并行数组来跟踪它:

class Student {
    enum Gender {MALE, FEMALE}

    private String name;
    private Course course; // This can be a String if that's simpler for your project
    private Gender gender;
    private School school; // See note for 'course'
}

ArrayList<Student> students;
Run Code Online (Sandbox Code Playgroud)