我创建的数组有20个元素,但代码不要求用户同时输入所有20个项目。他们可以在20以下输入任意数量的项目,然后单击按钮以显示他们到目前为止输入的值。
我可以弄清楚如何对数组进行排序,以及如何显示所有20个元素,但我无法弄清楚如何调整我的代码以仅显示它们输入的值。使用下面的代码,如果用户只输入20个元素中的5个,他们会得到一大堆0和它们的值。
private void btnDisplayScore_Click(object sender, EventArgs e)
{
string scoresString = "";
foreach (int s in scores)
scoresString += s + "\n";
MessageBox.Show(scoresString, "Sorted Scores");
txtScore.Focus();
}
道歉,如果这是一个愚蠢的问题,我只是开始编程。
答案 0 :(得分:3)
您可以使用Sort(T[] array, int from, int length)
的重载,该重载需要另外两个参数来指示要排序的初始索引和子数组的长度。例如,如果用户输入了K
个元素,您可以将范围从零排序到K
,如下所示:
int[] myArray = new int[20];
int K = ... // This variable is set to the number of items the user enters
Array.Sort(myArray, 0, K);
更好的解决方案是避免在知道阵列数量之前调整阵列大小。最佳解决方案是使用允许您动态添加项目的容器,例如List<T>
。
答案 1 :(得分:2)
使用某种List
数据结构,例如List<T>
代替数组。
答案 2 :(得分:1)
您可以使用一些方法。您可以使用List
代替数组来存储分数。列表没有固定大小,因此您需要添加一些代码以防止用户输入超过20个项目。
如果您想继续使用数组,可以在程序中添加第二个变量,以跟踪用户输入的项目数,例如itemCount
。然后,您可以使用this overload of Array.Sort仅对数组中的填充值进行排序,并且可以将foreach
循环更改为仅for
循环,该循环仅迭代实际输入的值。< / p>
for (int ct = 0; ct < itemCount; ct++)
{
scoresString += s + "\n";
' etc
}
答案 3 :(得分:1)
使用List,对其进行排序,然后显示
List<int> i = new List<int>();
i.Add(20);
i.Add(4);
i.Add(2);
i.Add(5000);
i.Add(65);
i.Sort();
foreach (int ii in i)
{
Console.WriteLine(ii);
}
Console.ReadLine();
答案 4 :(得分:0)
这对你有用吗?
private void btnDisplayScore_Click(object sender, EventArgs e)
{
MessageBox.Show(String.Join("\n",
scores
.Where(s => s > 0)
.OrderBy(s => s)), "Sorted Scores");
txtScore.Focus();
}