为了账号安全,请及时绑定邮箱和手机立即绑定

从 Java 列表中删除一条记录

从 Java 列表中删除一条记录

温温酱 2023-05-10 13:16:39
这是我从列表中删除记录的代码,但我似乎无法让它工作。有什么建议么?public void deleteRecord (Scanner in){    int delete = 0;    showRecords();    System.out.println("Enter the number in the list to delete:");    delete = in.nextInt();    delete = delete -1;    for (int i = delete; i < this.size; i++)    {        this.collection[i] = this.collection[i + 1];        this.collection[size] = null;        this.size--;        System.out.println("Record deleted successfully");        showRecords();    }    System.out.println("Please enter a number in the list to delete");}
查看完整描述

2 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

你减少了size太多次。它应该只在你移动循环中的元素后完成一次for。


还要注意for循环条件。由于您在循环内部使用,i + 1您只能循环直到i < size - 1或者您将尝试访问数组大小之外的元素。


int toDelete = in.nextInt(); // assume it's between 0 and size - 1

for (int i = toDelete; i < size - 1; i++) {

    collection[i] = collection[i + 1];

collection[size] = null;

size--;


查看完整回答
反对 回复 2023-05-10
?
慕容3067478

TA贡献1773条经验 获得超3个赞

在这种情况下,我想您有义务使用数组操作来完成工作,


不过,就个人而言,我会通过使用完全避免循环System.arraycopy():


System.arraycopy(this.collection, deletionIndex, this.collection, deletionIndex + 1,

        this.size - (deletionIndex + 1));

this.size--;

较短的代码往往意味着较少的错误,并且该特定代码至少与原始循环一样清晰,至少对我而言。此外,如果没有循环,就没有机会将不属于循环的语句放入循环中,这是原始代码的主要问题。


查看完整回答
反对 回复 2023-05-10
  • 2 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信