这是我从列表中删除记录的代码,但我似乎无法让它工作。有什么建议么?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--;
慕容3067478
TA贡献1773条经验 获得超3个赞
在这种情况下,我想您有义务使用数组操作来完成工作,
不过,就个人而言,我会通过使用完全避免循环System.arraycopy():
System.arraycopy(this.collection, deletionIndex, this.collection, deletionIndex + 1,
this.size - (deletionIndex + 1));
this.size--;
较短的代码往往意味着较少的错误,并且该特定代码至少与原始循环一样清晰,至少对我而言。此外,如果没有循环,就没有机会将不属于循环的语句放入循环中,这是原始代码的主要问题。
添加回答
举报
0/150
提交
取消