1

所以我的代码遇到了一些麻烦。对于初学者,我遇到了输出所有数组的问题。请注意,我只编码了 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

4 回答 4

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

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

Console.WriteLine("List of People in Order: {0}", string.Join(", ", players.Take(count)));
于 2012-08-16T01:48:43.423 回答
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(players)之前调用了 Array.Sort(players) 以实际加载数据 - 所以您在没有任何数据的情况下进行排序!在对 inputPartInformation 的调用之后移动 Array.Sort 调用。

希望这可以帮助!

于 2012-08-16T01:54:54.783 回答
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]);


    }
}
于 2012-08-16T02:04:28.633 回答
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        

    }
于 2012-08-16T01:56:30.323 回答