我不明白为什么这段代码有效?

时间:2015-09-21 15:18:11

标签: c# arrays algorithm

该类中的方法接受来自用户的整数以从列表中删除。代码有效。我遇到的问题是我不明白它为什么会起作用;事实上,据我所知,不应该工作。

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)

2 个答案:

答案 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。