该类中的方法接受来自用户的整数以从列表中删除。代码有效。我遇到的问题是我不明白它为什么会起作用;事实上,据我所知,不应该工作。
public void Remove(int ValueToRemove)
{
bool isFound = false;
for (int count = 0; count < CurrentIndex; count++)
{
if (list[count] == ValueToRemove && !isFound)
{
isFound = true;
CurrentIndex = CurrentIndex -1;
}
if (isFound && ((count + 1) < list.Length))
{
list[count] = list[count + 1];
}
}
}
不应该声明......
if(list[count] == ValueToRemove && !isFound)
...总是评估为false,因此跳过括号内的代码? Isn&#t; t!isFound相当于评估
if(list[count] == ValueToRemove && isFound == true)
在代码中......
if (list[count] == ValueToRemove && !isFound)
{
isFound = true;
CurrentIndex = CurrentIndex -1;
}
...如果CurrentIndex = CurrentIndex - 1,使CurrentIndex等于它的值,那么前一个索引会发生什么?
...最后
if (isFound && ((count + 1) < list.Length))
{
list[count] = list[count + 1];
}
... list [count]的值是否等于下一个索引的值(例如,索引5等于索引6中的任何值),或者该索引中包含的值是否等于一个(例如,如果索引5包含值10,则索引5现在将等于11)
答案 0 :(得分:7)
由于isFound
为false,!isFound
计算结果为true,并输入if语句。
这意味着!isFound
与说:
isFound == false
...如果CurrentIndex = CurrentIndex - 1,使CurrentIndex等于它的值,那么前一个索引会发生什么?
上一个索引没有任何反应,而是在列表中的当前项上重复循环。
... list [count]的值是否等于下一个索引的值(例如,索引5等于索引6中的任何值),或者该索引中包含的值是否等于一个(例如,如果索引5包含值10,则索引5现在将等于11)
它获取列表中下一个项目的值,并将其分配给list[count]
。
您可以通过设置断点和调试代码,查看正在发生的事情并随时检查值来自己回答很多类型的问题。
答案 1 :(得分:0)
回答你的问题:
if (isFound && ((count + 1) < list.Length))
{
list[count] = list[count + 1];
}
条件首先检查下一个索引是否存在,然后将该下一个索引的值分配给当前值。换句话说,如果count = 5,它首先检查以确保list [6]不会导致未定义的偏移量,然后list [5] = list [6]会将list [6]中的值赋值给列表[5]。因此,如果list [5]为10且list [6]为11,则list [5]变为11。