0

我有那个功能,我希望用户选择一些所有时间表来删除一个。我的删除逻辑是找到i我想要删除的,然后将我的数组的最后一个调度与那个交换i,然后最后一个为空。

当我测试我的程序时,我发现当我想删除数组的最后一个时,一切正常,但是当我尝试删除其他内容时,eclipse 中会出现错误。

线程“主”java.lang.NullPointerException 中的异常我无法弄清楚发生了什么。我已经多次审查我的代码。

 public void ScheduleDelete(){
    StandardInputRead readDeleteSchedule = new StandardInputRead();

    int deleteScheduleNum =readDeleteSchedule.readPositiveInt("Enter the schedule number you want to delete: ");
    for(int i=0;i<scheduleSize;i++){
        if(deleteScheduleNum==this.scheduleList[i].getScheduleNum()){
            this.scheduleList[i]= this.scheduleList[this.scheduleSize-1];
            this.scheduleList[i].setScheduleNum(i);
            this.scheduleList[this.scheduleSize-1]= null;
        }
    }
    this.scheduleSize--;
}
4

1 回答 1

1

当您第二次将元素与最后一个元素交换时,您将替换该元素null(因为您刚刚将数组的最后一个元素设置为上null一次交换中的元素)。因此,当您要使用该元素时,您正在对空引用进行操作,因此会出现异常。

您需要跟踪数组中有多少活动元素,并将该元素与最后一个活动元素交换。

或者,您可以使用动态集合(例如列表),您不需要明确跟踪活动元素,因为您只存储活动元素。

于 2012-05-26T17:03:58.353 回答