我不明白为什么这段代码可以工作

本文关键字:代码 工作 明白 为什么 段代码 | 更新日期: 2023-09-27 18:13:41

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

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,因此跳过运行大括号内的代码?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)

我不明白为什么这段代码可以工作

由于isFound为假,!isFound求值为真,因此输入if语句。

这意味着!isFound相当于说:

isFound == false

…如果CurrentIndex = CurrentIndex - 1,使CurrentIndex等于比它所做的少一个,前一个索引会发生什么?

前一个索引不发生任何变化,而是在列表中的当前项上重复循环。

…list[count]的值是否等于下一个索引的值(例如,索引5等于索引6中的值),或者该索引中包含的值是否等于更高的值(例如,如果索引5包含的值为10,那么索引5现在将等于11)

将列表中下一项的值赋给list[count]

您可以通过设置断点和调试代码,查看正在发生的事情并检查值来自己回答许多这类问题。

回答你的问题:

if (isFound && ((count + 1) < list.Length))
        {
            list[count] = list[count + 1];
        }

条件首先检查下一个索引是否存在,然后将下一个索引的值赋给当前值。换句话说,如果count = 5,它首先检查确保list[6]不会导致未定义的偏移量,然后list[5] = list[6]将list[6]中的值赋值给list[5]。如果list[5]是10,list[6]是11,list[5]就变成了11。