Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c语言中从列表中获取最大值_C#_List_Loops - Fatal编程技术网

C# 在c语言中从列表中获取最大值

C# 在c语言中从列表中获取最大值,c#,list,loops,C#,List,Loops,因此,我在使用一个C程序时遇到了一些问题,该程序旨在对列表中的8高值求和 该程序通过声明一个变量currenthigh来工作,该变量存储等级列表中的一个值。然后将其自身与值ABSHOW进行比较,查看其是否大于确定的最高值。如果是,则将currenthigh设置为新的最高值 循环遍历列表并确认最大值后,将其添加到uppertotal变量中,并使用喷射器变量将其从列表中删除。然后程序迭代,这次没有先前的最高值。它迭代8次,以便最终将前8个值添加到uppertotal 问题是,尽管代码中有删除它的指令

因此,我在使用一个C程序时遇到了一些问题,该程序旨在对列表中的8高值求和

该程序通过声明一个变量currenthigh来工作,该变量存储等级列表中的一个值。然后将其自身与值ABSHOW进行比较,查看其是否大于确定的最高值。如果是,则将currenthigh设置为新的最高值

循环遍历列表并确认最大值后,将其添加到uppertotal变量中,并使用喷射器变量将其从列表中删除。然后程序迭代,这次没有先前的最高值。它迭代8次,以便最终将前8个值添加到uppertotal

问题是,尽管代码中有删除它的指令,但列表中仍然保留了最高的变量,所以它只将最高值添加到自身8次

int currenthigh = 0;
int abshigh = 0;
int ejector = 0;
int uppertotal = 0;

for (int g = 0; g < 8; g++)
{
    for (int z = 0; z < gradelist.Count; z++)
    {
        Console.WriteLine("PASS STARTED");
        currenthigh = Convert.ToInt32((gradelist[z]));
        Console.WriteLine("currenthigh" + currenthigh);

        if (currenthigh > abshigh)
        {
            abshigh = currenthigh;
            ejector = z;
        }

    }
    Console.WriteLine("ejector" + ejector);
    uppertotal = uppertotal + currenthigh;

    gradelist.RemoveAt(ejector);
    Console.WriteLine("PASS COMPLETE");
    Console.WriteLine("RESETING");      
}

注意-gradelist是一个整数列表,始终至少包含12项。

对于相对简单的任务,您的代码非常大。 您可以选择列表的顶部X,如下所示:

top_list = gradelist.OrderByDescending(i => i).Take(X)

使用列表/集合系统时。Linq是您的朋友

发生这种情况是因为您没有从成绩列表中删除最高值。注意,你们把Z放在了弹出器中,但Z是成绩表中的一个索引,当你们试图删除它时,你们什么也不删除,因为成绩表中并没有Z作为成员!而不是

gradelist.RemoveAt(ejector);
您应该这样做:

gradelist.RemoveAt(gradelist[ejector]);
但我建议你采取完全不同的方法。如果您只想得到您的uppertotal,即gradlist中前8名成员的总和,请使用以下简单技巧:

uppertotal += gradelist.OrderByDescending(p => p).Take(8).Sum();

这两个都是真的,我目前不支持一台装有VS的电脑,所以无法运行它:。感谢fb,代码现在应该可以运行了谢谢你!我不知道这个方法!