0

ユーザーがすべてのスケジュールの数を選択して削除する機能があります。削除の私のロジックは、削除しiたいものを見つけて、配列の最後のスケジュールをそのスケジュールと交換し、最後のスケジュールをinullにすることです。

プログラムをテストすると、配列の最後の 1 つを削除しようとするとすべて正常に動作することがわかりますが、他の何かを削除しようとすると、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

要素を最後の要素と 2 度目に交換すると、要素がnull(前回の交換で配列の最後の要素を に設定したため) に置き換えられますnull。したがって、要素を使用する場合は、null 参照を操作しているため、例外が発生します。

配列内にあるアクティブな要素の数を追跡し、要素を最後のアクティブな要素と交換する必要があります。

または、アクティブな要素のみを保存するため、アクティブな要素を明示的に追跡する必要のない動的コレクション (リストなど) を使用できます。

于 2012-05-26T17:03:58.353 に答える