有人可以解释此代码如何工作

时间:2019-12-18 19:06:11

标签: c# arrays

我们当前正在执行数组中的C#。我必须从输入中获取第二大数字。但是我不知道 此代码的功能。有人可以帮我解释一下。 有关整个代码,请查看 here

解释代码:

 static int ztgzahl(int[] ZL)
        {
            int MinZ = Int16.MinValue;
            int MaxZ = Int16.MinValue;
            for(int i = 0; i < ZL.Length; i++)
            {
                if (ZL[i] > MaxZ)
                {
                    MinZ = MaxZ;
                    MaxZ = ZL[i];
                }
                else if (ZL[i] > MinZ)
                {
                    MinZ = ZL[i];
                }
            }
            return MinZ;
        }

3 个答案:

答案 0 :(得分:0)

此代码遍历数组,试图找到两个最大的数字。但是,它为此完全使用了变量名MinZ和MaxZ。应该是MaxA和MaxB之类的。

对于每个数字,它都会检查数字是否大于当前的MaxZ(最大值)。如果是,它将前第二大的权重交给MinZ。如果不是,它还会检查它是否比MinZ更小(因为MaxZ的数字可能更大,但仍然比MinZ更小)。

我不是100%确信这可行。就我个人而言,我只是对数组进行排序,然后从右侧获取第二个。或者,如果这是一个数据库,则使用查询从底部获得第二个。众所周知,这种逻辑很容易搞砸。

答案 1 :(得分:0)

Int16.MinValue

这将获得Int16允许的最小值

然后迭代 ZL 数组,如果找到的值大于找到的最大值,则替换变量值,如果不是,则检查是否可以将其放置为第二高值。

答案 2 :(得分:0)

请在下面的摘要中找到我的评论

static int ztgzahl(int[] ZL)
        {
            int MinZ = Int16.MinValue; // Min value of Int16 is -32768
            int MaxZ = Int16.MinValue; 
            for(int i = 0; i < ZL.Length; i++) //Iterating over each index of array
            {
                if (ZL[i] > MaxZ)    //If current element is greater than MaxZ
                {
                    MinZ = MaxZ;    //MinZ remainsthe same
                    MaxZ = ZL[i];   //MaxZ is the current element
                }
                else if (ZL[i] > MinZ) //If current element is greater than MinZ
                {
                    MinZ = ZL[i];      //MinZ is current element
                }
            }
            return MinZ;
        }

基于完整的摘要,数组中将没有任何负数元素。因此,考虑由4个元素{3,1,5,7}

组成的简短数组

第一次迭代:

MinZ和MaxZ均为-1

MinZ = -1

MaxZ = 3

第二次互动:

MinZ = 1

第三次迭代:

MinZ = 3

MaxZ = 5

第4次迭代:

MinZ = 5

MaxZ = 7

因此,第二大元素是5,由MinZ返回