Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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# - Fatal编程技术网

C# 为数组编制索引以使用数值放置正确的字符串值

C# 为数组编制索引以使用数值放置正确的字符串值,c#,C#,我让它打印排序后的成绩数组,但显示的成绩与错误的名称 class Program { static void Main(string[] args) { int namelength; string names; double grade, max, min, testgradeaverage; int nameindex = 0; int gradeindex = 0; Conso

我让它打印排序后的成绩数组,但显示的成绩与错误的名称

class Program
{
    static void Main(string[] args)
    {
        int namelength;
        string names;
        double grade, max, min, testgradeaverage;
        int nameindex = 0;
        int gradeindex = 0;

        Console.WriteLine("Please enter the amount of names you wish to enter: ");
        namelength = Convert.ToInt32(Console.ReadLine());
        string[] name = new string[namelength];
        double[] testgrades = new double[namelength];

        for (int i = 0; i < testgrades.Length; i++)
        {
            Console.WriteLine("Please enter the names of each student");
            names = Convert.ToString(Console.ReadLine());
            name[i] += names;
            nameindex = i;

        }
        for (int i = 0; i < name.Length; i++)
        {
            Console.WriteLine("Please enter the final grade for " + name[i]);

            grade = Convert.ToDouble(Console.ReadLine());
            testgrades[i] += grade;
            gradeindex = i;

        }
        max = testgrades.Max();

        min = testgrades.Min();
        testgradeaverage = testgrades.Average();

        Console.WriteLine("The highest grade is: " + max);
        Console.WriteLine("The Lowest Grade is:" + min);
        Console.WriteLine("The class average is: " + testgradeaverage);

        for (int k = 0; k < namelength; k++)
        {
            sorted(ref testgrades);
            Console.WriteLine(name[nameindex] + testgrades[k]);
        }




        Console.ReadLine();

    }
    public static void sorted(ref double [] testgrades)
    {
        double temp = 0;
        for (int write = 0; write < testgrades .Length; write++)
        {
            for (int sort = 0; sort < testgrades.Length - 1; sort++)
            {
                if (testgrades [sort] <= testgrades [sort + 1])
                {
                    temp = testgrades[sort + 1];
                    testgrades [sort + 1] = testgrades [sort];
                    testgrades [sort] = temp;
                }
            }
        }


    }
类程序
{
静态void Main(字符串[]参数)
{
整数名长度;
字符串名;
双级、最大值、最小值、平均值;
int nameindex=0;
int-gradeindex=0;
Console.WriteLine(“请输入您希望输入的名称数量:”);
namelength=Convert.ToInt32(Console.ReadLine());
字符串[]名称=新字符串[namelength];
double[]testgrades=新的double[namelength];
for(int i=0;i如果(testgrades[sort]创建自定义类型,例如:

public class NameGrade
{
    public string Name;
    public double Grade;
}
然后只使用该类型的一个数组。用数据填充它,然后对元素进行排序。您可以使用扩展方法(
使用System.Linq
):
NameGrade[]sorted=myArray.OrderBy(x=>x.Grade).ToArray();

编辑:


看起来像是
Array.Sort(键、值)
执行此操作。但是最好使用自定义类型(更好的代码可读性)。

创建自定义类型,例如:

public class NameGrade
{
    public string Name;
    public double Grade;
}
然后只使用该类型的一个数组。用数据填充它,然后对元素进行排序。您可以使用扩展方法(
使用System.Linq
):
NameGrade[]sorted=myArray.OrderBy(x=>x.Grade).ToArray();

编辑:


看起来像是
Array.Sort(key,values)
完成了这项工作。但是最好使用自定义类型(更好的代码可读性)。

数组中有一个超负荷的
Array.Sort
,它接受两个
数组;一个用于键,一个用于项。这两个数组中的项都根据键数组进行排序:

Array.Sort(testgrades, names);

如果无法从此重载中获得结果,则可以创建自定义比较器并将其作为第三个参数传递。

存在
数组重载。Sort
接受两个
数组;一个用于键,一个用于项。这两个数组的项都根据键数组进行排序:

Array.Sort(testgrades, names);

如果无法从此重载中获得结果,可以创建自定义比较器并将其作为第三个参数传递。

简短回答更改此选项:

for (int k = 0; k < namelength; k++)
{
    sorted(ref testgrades);
    Console.WriteLine(name[nameindex] + testgrades[k]);
}
长答覆:

有几件事:

  • 您不需要通过引用传递
    testGrades
    数组。C#将通过引用传递此数组,因为数组不是值类型
  • 不要从循环中调用
    sorted
    方法,因为您会不断对相同的值进行排序
  • 我认为您的指导老师可能要求您自己进行排序,而不是使用库调用,但是如果允许您使用Linq,因为您已经使用了它,那么您也可以使用Linq对arry进行排序。使用将升序排序的
    OrderBy
    ,使用将降序排序的
    OrderByDescending
  • 您有以下代码:

    for (int i = 0; i < testgrades.Length; i++)
    {
         Console.WriteLine("Please enter the names of each student");
         names = Convert.ToString(Console.ReadLine());
         name[i] += names;
         nameindex = i;
    }
    
    for(int i=0;i

    请参阅变量
    nameindex
    在循环后将具有最后一个
    i
    值。因此,当您稍后在排序后写入名称时,您将始终显示相同的名称(输入的姓氏)。

    简短回答更改此项:

    for (int k = 0; k < namelength; k++)
    {
        sorted(ref testgrades);
        Console.WriteLine(name[nameindex] + testgrades[k]);
    }
    
    长答覆:

    有几件事:

  • 您不需要通过引用传递
    testGrades
    数组。C#将通过引用传递此数组,因为数组不是值类型
  • 不要从循环中调用
    sorted
    方法,因为您会不断对相同的值进行排序
  • 我认为您的指导老师可能要求您自己进行排序,而不是使用库调用,但是如果允许您使用Linq,因为您已经使用了它,那么您也可以使用Linq对arry进行排序。使用将升序排序的
    OrderBy
    ,使用将降序排序的
    OrderByDescending
  • 您有以下代码:

    for (int i = 0; i < testgrades.Length; i++)
    {
         Console.WriteLine("Please enter the names of each student");
         names = Convert.ToString(Console.ReadLine());
         name[i] += names;
         nameindex = i;
    }
    
    for(int i=0;i

    请参阅变量
    nameindex
    在循环后将具有最后一个
    i
    值。因此,当您稍后在排序后写入名称时,您将始终显示相同的名称(输入的最后一个名称).

    你只是在对分数进行排序,这意味着即使分数移动,你各自的名字也会保持在同一个位置。所以我必须进行排序