1

したがって、現在のスコア(playerScore)が現在のインデックスよりも高いかどうかを確認するために、highscore配列(scorelist)のすべてのインデックスを通過するこのループを作成しようとしています。ifステートメントが「yes」を取得した場合、インデックスに沿ってすべてのスコアを押し下げ(またはそれよりも高いですか?)、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

配列をに変更し、次のList<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 に答える