1

所以我试图让这个循环遍历高分数组(scorelist)的每个索引,以检查当前分数(playerScore)是否高于当前索引。如果 if 语句得到“是”,那么它应该沿着索引将所有分数降低(或者更高?)并将 playerScore 放在应该的位置。

{
    Console.Write("input name: ");
    string playerName = Console.ReadLine();
    Console.Write("input score: ");
    int playerScore = Convert.ToInt32(Console.ReadLine());

    for (int i = 0; i < 10; i++)
    {
        if (playerScore > scoreList[i])
        {
            int nextNo = 9;
            for (int n = 10; n > 0; n--)
            {

                scoreList[n] = scoreList[nextNo];
                nameList[n] = nameList[nextNo];
                nextNo--;
            }
            scoreList[i] = playerScore;
            nameList[i] = playerName;
        }
    }
}

使用这个当前代码,它只是将 playerScore 放在第一个索引上(如果它高于之前存储在那里的值),然后将它复制到索引的其余部分。对于如何解决这个问题,有任何的建议吗?

4

2 回答 2

5

它可以更容易地完成:

int prev = playerScore;
for (int i = 0; i < 10; i++)
{
    if (playerScore > scoreList[i])
    {
        int temp = scoreList[i];
        scoreList[i] = prev;
        prev = temp;
    }
}

我假设您只需要前 10 个结果(并且您的数组中已经有 10 个元素)。

于 2013-03-10T09:29:11.167 回答
2

将您的数组更改为 aList<int>并使用以下代码:

var scorelist = new List<int>();

//populate your scorelist;

var playerScore = someintValue;

var firstlower = scorelist.FirstOrDefault(x => x < playerScore);

if (firstlower != null)
    scorelist.Insert(playerScore, scoreList.IndexOf(firstlower);
else
    scorelist.add(playerScore);

编辑:

如果您需要在插入后将列表裁剪为最多 10 个项目,只需:

scorelist = scorelist.Take(10).ToList();

于 2013-03-10T09:27:53.777 回答