用于删除数组项的嵌套 For 循环
Nested For Loops for Array Item Removal
这可能是一个菜鸟问题,但我一直在研究这个项目,但无法让它发挥作用。我很沮丧并四处试验并让它以某种方式工作。我所做的更改是我向 numOfItem 添加了一个 -1。
如果有人能向我解释为什么这样做,我将不胜感激。我相信我的头脑并没有真正正确地阅读代码。我的印象是,如果我要删除最后一个索引上的项目,它应该会引发错误。
for (int j = i; j < numOfItem - 1; j++)
此代码属于此方法中的嵌套 for 循环:
//Removes only a single instance of the specified item.
//If the item doesnt exist in the bag, it returns false
public boolean remove(Object item) {
for (int i = 0; i < numOfItem; i++) {
if (stuff[i].equals(item)) {
for (int j = i; j < numOfItem - 1; j++)
stuff[j] = stuff[j + 1];
stuff[numOfItem - 1] = null;
numOfItem--;
return true;
}
}
return false;
}
numOfItem 设置为 0,当对象包被初始化时,表示包中有 0 个项目,但是包在初始化时被赋予最大容量(用户输入)。如果需要更多信息,请告诉我。提前致谢。
我假设您指的是行 stuff[numOfItem - 1] = null
如果是这种情况,那么答案很简单。数组索引从 0 开始,而不是 1,因此如果数组中有 50 个项目 (numOfItem = 50),则索引将为 0、1、2、3...49 没有第 50 个值,因为索引 0 在技术上是第一个数组中的值。因此,如果您编写 stuff[numOfItem] = null
,您将尝试访问数组中的第 50 个索引,但是,数组中的最大索引是 49,因为它从 0 开始,而不是 1。
如果使用以下步骤找到数组中的元素,您的代码会尝试从数组中删除该元素:
步骤 1:
找到元素。
第 2 步:
a) 如果没有找到,return false;
b) 如果找到,则将所有元素从找到该元素的索引向左移动。
c) 将数组的最后一个索引设置为空。
在 步骤 2 b) 中,轮班由以下人员完成:
for(int j = i; j < numOfItem - 1; j++)
stuff[j] = stuff[j + 1];
在上面的代码中,您需要 迭代循环直到倒数第二个索引 ,因为 last index需要设置为null以删除元素后减少数组大小。 如果您尝试迭代最后一个索引,那么stuff[j+1]
将抛出ArrayIndexOutOfBoundException
.这就是 numOfItem -1
有效的原因。
这可能是一个菜鸟问题,但我一直在研究这个项目,但无法让它发挥作用。我很沮丧并四处试验并让它以某种方式工作。我所做的更改是我向 numOfItem 添加了一个 -1。
如果有人能向我解释为什么这样做,我将不胜感激。我相信我的头脑并没有真正正确地阅读代码。我的印象是,如果我要删除最后一个索引上的项目,它应该会引发错误。
for (int j = i; j < numOfItem - 1; j++)
此代码属于此方法中的嵌套 for 循环:
//Removes only a single instance of the specified item.
//If the item doesnt exist in the bag, it returns false
public boolean remove(Object item) {
for (int i = 0; i < numOfItem; i++) {
if (stuff[i].equals(item)) {
for (int j = i; j < numOfItem - 1; j++)
stuff[j] = stuff[j + 1];
stuff[numOfItem - 1] = null;
numOfItem--;
return true;
}
}
return false;
}
numOfItem 设置为 0,当对象包被初始化时,表示包中有 0 个项目,但是包在初始化时被赋予最大容量(用户输入)。如果需要更多信息,请告诉我。提前致谢。
我假设您指的是行 stuff[numOfItem - 1] = null
如果是这种情况,那么答案很简单。数组索引从 0 开始,而不是 1,因此如果数组中有 50 个项目 (numOfItem = 50),则索引将为 0、1、2、3...49 没有第 50 个值,因为索引 0 在技术上是第一个数组中的值。因此,如果您编写 stuff[numOfItem] = null
,您将尝试访问数组中的第 50 个索引,但是,数组中的最大索引是 49,因为它从 0 开始,而不是 1。
如果使用以下步骤找到数组中的元素,您的代码会尝试从数组中删除该元素:
步骤 1:
找到元素。
第 2 步:
a) 如果没有找到,return false;
b) 如果找到,则将所有元素从找到该元素的索引向左移动。
c) 将数组的最后一个索引设置为空。
在 步骤 2 b) 中,轮班由以下人员完成:
for(int j = i; j < numOfItem - 1; j++)
stuff[j] = stuff[j + 1];
在上面的代码中,您需要 迭代循环直到倒数第二个索引 ,因为 last index需要设置为null以删除元素后减少数组大小。 如果您尝试迭代最后一个索引,那么stuff[j+1]
将抛出ArrayIndexOutOfBoundException
.这就是 numOfItem -1
有效的原因。