在Java中从列表中删除记录
这是我从列表中删除记录的代码,但我似乎无法让它工作。有什么建议吗在Java中从列表中删除记录,java,Java,这是我从列表中删除记录的代码,但我似乎无法让它工作。有什么建议吗 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 = de
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");
}
public void deleteRecord(扫描仪输入)
{
int delete=0;
showRecords();
System.out.println(“在列表中输入要删除的编号:”);
delete=in.nextInt();
删除=删除-1;
for(int i=delete;i
您将大小减少了太多次。在移动for
循环中的元素后,只能执行一次
还要注意for
循环条件。由于您在循环内使用i+1
,因此只能循环到i
,否则您将尝试访问数组大小以外的元素
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--;
int-toDelete=in.nextInt();//假设它介于0和大小-1之间
for(inti=toDelete;i
我想您有义务使用数组操作来完成这项工作,在这种情况下,@KarolDowbecki的回答既确定了主要问题,又提供了一个很好的解决方案
不过,就个人而言,我会使用System.arraycopy()
,完全避免循环:
更短的代码往往意味着更少的错误,而且特定的代码至少和原始循环一样清晰,至少对我来说是这样。而且,如果没有循环,就没有机会将不属于那里的语句放入循环中,这是原始代码的主要问题。你是什么意思-“我似乎无法让它工作”?
System.arraycopy(this.collection, deletionIndex, this.collection, deletionIndex + 1,
this.size - (deletionIndex + 1));
this.size--;