按字母顺序排列的数组

时间:2012-08-16 01:38:28

标签: c# arrays

所以我的代码遇到了一些麻烦。对于初学者,我有这个问题,输出所有的数组。请注意,我只编写了12天的时间,由于我的大学学习前景,我的老师在C#编码方面略微跳过了基础知识。我刚刚得知它没有按字母顺序排序......

    static int inputPartInformation(string[] pl)
    {
        int i = 0;

        do
        {
            Console.Write("Enter a Name: ");
            //for the player
            pl[i] = Console.ReadLine();

        }
        while (pl[i++].CompareTo("Q") != 0);
        //if they write Q for the player it will quit
        return i - 1;
    }

    static void Main(string[] args)
    {
        String[] players = new String[100];
        Array.Sort(players);
        // Sort array.

        //defines players in this new instance

        var count = inputPartInformation(players);

        //for the portion of the code that handles the input

        //calculates the average score

        Console.WriteLine("List of People in Order: {0}, {1}, {2}, {3}, {4}, {5}, {6},", players);
        Console.ReadLine();
    }
}

}

4 个答案:

答案 0 :(得分:3)

  • 您在填充名称之前进行排序;什么也没做。
  • 您正在使用固定的多项参数参考列表{0}, {1},{2}打印单个项目,依此类推;它不会起作用,即使它确实会将你的输出限制在前七项
  • 您不知道要排序的项目数量。更改void inputPartInformation(string[] pl)以返回counti-1),然后使用Array.Sort(players, 0, count);

将多个字符串转换为单个字符串的最简单方法是使用string.Join

Console.WriteLine("List of People in Order: {0}", string.Join(", ", players.Take(count)));

答案 1 :(得分:1)

首先,“Q”正被添加到输入列表中,因为在 之后接受输入并将其插入到数组中时,不会测试“Q”。重新设计这种方法的一种方法是将输入名称保存到临时变量中,测试 为“Q”,并且只有在其他情况下才将其添加到数组中。在循环中,将输入/测试修改为:

   bool enteringNames=true;
   do{
    String nextName = Console.ReadLine();
    if (nextName.CompareTo("Q")==0)
    {
       enteringNames=false;
    }
    else
    {
       p[i]=nextName;
    }
    i++;
  }
  while(enteringNames);

这只是完成工作的一种方式。请记住,固定的100条目数组并不是最强大的方法...永远不知道可能有多少名字!

现在,最后一个WriteLine有点奇怪,但我认为你可以自己解决这个问题 - 它非常简单地遍历数组,或只是将所有字符串连接在一起:)

其次,你的排序不起作用,因为你在调用inputPartInformation(播放器)实际加载数据之前调用了Array.Sort(播放器),所以你在没有任何数据的情况下进行排序!调用inputPartInformation后移动Array.Sort调用。

希望这有帮助!

答案 2 :(得分:1)

试试这个,它会起作用,但首先尝试研究API

static int inputPartInformation(string[] pl)
    {

        int i = 0;
        String temp;
        while (true)
        {
            Console.Write("Enter a Name: ");
            temp=Console.ReadLine();
            if (temp=="Q")
                break;
            else pl[i++] = temp;
        }
        return i;

    }

    static void Main(string[] args)
    {

        String[] players = new String[100];

        int size=inputPartInformation(players);

        for (int i = 0; i <= size; i++)
            Console.WriteLine(players[i]);


    }
}

答案 3 :(得分:0)

Q出现在您的结果中,因为您要将其分配给您的数组。

重写函数以在分配之前检查值,例如

static void inputPartInformation(string[] pl)
    {
        int i = 0;
        do
        {
            Console.Write("Enter a Name: ");
            //for the player
            newStrInput = Console.ReadLine();

if (newStrInput == "Q")
break;//if they write Q for the player it will quit

pl[i]=newStrInput;
i++;
     }
        while (i>-1);//infinite loop        

    }