我正在尝试在C#代码(控制台应用程序)中创建一个简单的程序,它会提示用户输入10个名称,然后以随机顺序显示最后显示的10个名称(而不是输入名称的顺序)
这是我走了多远: -
static void Main(string[] args)
{
string[] names = new string [10];
int i;
for ( i = 0; i < 10 ; i++)
{
Console.WriteLine("Give me name " + (i+1) );
names[i] = Console.ReadLine();
}
for (int j = 0; j <= 10; j++)
{
Console.WriteLine(names[j]);
}
Console.ReadLine();
}
到目前为止,我已经能够提示用户输入10个名称,并存储这10个名称,并在最后显示它们,但是,一旦显示它我就会收到错误: - &#34; IndexOutOfRangeException未处理&# 34;并且Console.WriteLine(names[j]);
会突出显示。
最后,一旦这些问题被排序,我如何以随机顺序显示返回的名称?
感谢阅读。
答案 0 :(得分:1)
输入从0到9,但尝试从0到10打印。 数组中不存在第10项。 纠正它如下:
for (int j = 0; j < 10; j++)
{
Console.WriteLine(names[j]);
}
希望这有帮助。
答案 1 :(得分:1)
第一个循环从0到9运行,但第二个循环从0到10运行,因此您尝试显示数组中不存在的项目。将循环中的j <= 10
更改为j < 10
(就像在第一个循环中一样)循环到9而不是10。
更好的是,您可以在循环中使用i < names.Length
和j < names.Length
。这样你就可以改变数组的大小,循环仍然可以不做任何改动。
要以随机顺序显示项目,您需要随机播放该数组。最好的方法是Fisher-Yates shuffle。像这样随机播放数组中的项目:
Random rnd = new Random();
for (int i = 0; i < names.Length − 1; i++) {
int j = rnd.Next(i, names.Length);
string tmp = names[i];
names[i] = names[j];
names[j] = tmp;
}
然后你可以按照现在的方式显示数组中的项目(在循环中进行校正)。
答案 2 :(得分:0)
问题是您的索引是基于0的,并且包含10个条目,但最后一个是Array [9]而不是Array [10]
{弗兰克,保罗,约翰}
所以Array [0]是Frank, 和数组[3] ......超出范围。
你的循环使用
for (int j = 0; j <= 10; j++)
{
Console.WriteLine(names[j]);
}
第一次通过,j = 0,名字[j]对我们来说将是弗兰克。你的问题是因为10&lt; = 10确实是真的,它正在寻找j [10],它不存在。
解决方案是改变j&lt; 10
for (int j = 0; j < 10; j++)
{
Console.WriteLine(names[j]);
}
答案 3 :(得分:0)
要解决错误,只检查少于10(<10)而不是小于或等于10(&lt; = 10) 并获得随机顺序使用随机类。确保只创建一个随机实例,然后调用Next以便在紧密循环中生成新的随机数
Random random = new Random();
for (int j = 0; j < 10; j++)
{
int randomNumber = random.Next(1,10);
Console.WriteLine(names[randomNumber-1]);
}