所以我试图让这个循环遍历每个高分数组(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放在第一个索引上(如果它高于之前存储的索引),然后将其复制到索引的其余部分。有关如何解决此问题的任何建议吗?
答案 0 :(得分: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个元素)。
答案 1 :(得分: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();