我们当前正在执行数组中的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;
}
答案 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返回