Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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#,在尝试运行此代码时,我一直收到一个NullReferenceException未经处理的错误,不知道原因。 我想按人名分类 我只在c#工作了大约4个月 public static student[] players = new student[30]; public struct student { public string lastname; public string firstname; public string

在尝试运行此代码时,我一直收到一个NullReferenceException未经处理的错误,不知道原因。 我想按人名分类 我只在c#工作了大约4个月

    public static student[] players = new student[30];
    public struct student
    {
        public string lastname;
        public string firstname;
        public string likes;
    }

    public static void read()
    {
        StreamReader sr = new StreamReader(@"names.txt");
        int i = 0;
        while (!sr.EndOfStream)
        {
            players[i].lastname = sr.ReadLine();
            players[i].firstname = sr.ReadLine();
            players[i].likes = sr.ReadLine();
            i++;
        }
        sr.Close();
    }

        public static void sort()
        {
            //alphabetically lists players
            student temp;

            for (int i = 0; i < players.Length - 1; i++)
            {
                for (int pos = 0; pos < players.Length - 1; pos++)
                {

                    if (players[pos + 1].lastname.CompareTo(players[pos].lastname) < +0)
                    {
                        temp = players[pos + 1];
                        players[pos + 1] = players[pos];
                        players[pos] = temp;
                    }
                }
            }

        }
publicstaticstudent[]玩家=新学生[30];
公共结构学生
{
公共字符串lastname;
公共字符串名;
公共字符串喜欢;
}
公共静态无效读取()
{
StreamReader sr=新的StreamReader(@“names.txt”);
int i=0;
而(!sr.EndOfStream)
{
players[i].lastname=sr.ReadLine();
players[i].firstname=sr.ReadLine();
玩家[i].likes=sr.ReadLine();
i++;
}
高级关闭();
}
公共静态void排序()
{
//按字母顺序列出球员名单
学生临时工;
对于(int i=0;i
我可能抓到了空引用

while (!sr.EndOfStream)
{
    player[i] = new student();
    players[i].lastname = sr.ReadLine();
    players[i].firstname = sr.ReadLine();
    players[i].likes = sr.ReadLine();
    i++;
}

排序已经通过和内置到.NET framework中。在您的情况下,您可以大大减少功能:

public static IOrderedEnumerable<student> sort()
{
   IOrderedEnumerable<student> orderedPlayers = players.OrderBy(p => p.lastname);
   return orderedPlayers;
}
公共静态IORDerenumerable排序()
{
iorderenumerable orderedPlayers=players.OrderBy(p=>p.lastname);
返回订购的播放器;
}

即使
lastName
为null,这也不会引发异常。在比较
lastName
之前,需要检查数组项是否为
null

private static void Sort(Player[] players)
{
    //alphabetically lists players

    for (int i = 0; i < players.Length; i++)
    for (int pos = 0; pos < players.Length - 1; pos++)
    {
        var currentPlayer = players[pos] != null ? players[pos].LastName : null;
        var nextPlayer = players[pos + 1] != null ? players[pos + 1].LastName : null;

        if (Compare(currentPlayer, nextPlayer) > 0)
        {
            var temp = players[pos + 1];
            players[pos + 1] = players[pos];
            players[pos] = temp;
        }
    }
}

private static int Compare<T>(T current, T next)
    where T: IComparable
{
    if (current == null) return -1;
    if (next == null) return 1;
    return current.CompareTo(next);
}
private静态无效排序(Player[]players)
{
//按字母顺序列出球员名单
for(int i=0;i0)
{
var temp=玩家[pos+1];
玩家[pos+1]=玩家[pos];
玩家[pos]=临时工;
}
}
}
专用静态整数比较(T当前,T下一个)
其中T:i可比较
{
if(current==null)返回-1;
if(next==null)返回1;
返回当前值。比较(下一步);
}

如何填充玩家阵列?数组中的所有项都是有效对象吗?请将您的代码发布到填充“玩家”的位置。我想“玩家”是类定义中声明的“学生”的静态数组。您是否为“玩家”创建了新实例?可能是您可以在postNullReference中更新您的代码通常指的是未创建的对象不能使用[]应用索引这是您在尝试player[i][pos]时收到的错误消息?因为最初当我看到for循环时,我假设它是一个锯齿状数组。英雄联盟所以,只要使用玩家[pos]就可以了..谢谢你把它整理好了,哈哈!如果我回答了你的问题,请选择答案。谢谢