我正在创建一个小测验控制台应用程序。 我列出了一个包含3个问题的清单。 如何让程序随机选择一个问题并在控制台中打印出来?
我尝试了一些不同的代码,但由于某些原因似乎无法使其工作。 这是我尝试过的最后一个代码,我是从这个网站的另一个用户那里得到的,但是我得到了错误:
"The name 'string' does not exists in current context"
“由于'Quiz.Questions.main()'返回void,返回关键字后面不能跟一个对象表达式”
这是我尝试过的最后一段代码:
class Questions
{
public static void main()
{
var questions = new List<string>{
"question1",
"question2",
"question3"};
int index = Random.Next(strings.Count);
questions.RemoveAt(index);
return questions;
}
}
谢谢大家的回复。 我通过创建数组而不是List来解决我的问题。 这是我现在的代码:
class Questions
{
public static void main()
{
string[] questions = new string[3];
questions[0] = "question1";
questions[1] = "question2";
questions[2] = "question3";
Random rnd = new Random();
Console.WriteLine(questions[rnd.Next(0,2)]);
}
}
答案 0 :(得分:16)
您确定要删除问题并返回其余问题吗? 你不仅要选一个吗?像这样的事情:
public static void main()
{
var random = new Random();
var questions = new List<string>{
"question1",
"question2",
"question3"};
int index = random.Next(questions.Count);
Console.WriteLine(questions[index]);
}
答案 1 :(得分:4)
您需要一个System.Console.WriteLine语句。
class Questions
{
public static void main()
{
var questions = new List<string>{
"question1",
"question2",
"question3"};
int index = Random.Next(questions.Count);
System.Console.WriteLine(questions[index]);
}
}
答案 2 :(得分:3)
尝试这样的事情
public static void main()
{
var questions = new List<string>{
"question1",
"question2",
"question3"};
Random rnd = new Random();
int index = rnd.Next(questions.Count)
string question = questions[index];
questions.RemoveAt(index); // Are you sure you neex to remove?
System.Console.WriteLine(question);
}
您使用string
代替questions
时会出现拼写错误。此外,Random
对象需要被初始化。
答案 3 :(得分:1)
“名称'字符串'在当前上下文中不存在”
我假设你想要
int index = random.Next(questions.Count); // according to the lower-case random see last paragraph
而不是
int index = Random.Next(strings.Count);
由于没有名称为strings
的变量,并且您想要删除一个问题。
此外,您无法从void
方法返回任何内容。因此,创建一个返回列表:
private Random random = new Random();
List<string> GetRemoveQuestion(List<string> questions)
{
int index = random.Next(questions.Count);
questions.RemoveAt(index);
return questions;
}
修改:最后但并非最不重要的是,您无法使用Random.Next
。这可能会假设static
中存在Next
Random
方法,情况并非如此。因此,我已经在上面展示了如何创建和使用实例。请注意,您不应该在方法本身中创建它,因为它是以固有时间播种的。如果你非常快地调用这个方法,你会经常获得相同的“随机”值。
有关详细信息,请查看msdn at the remarks section。
答案 4 :(得分:1)
对于其他搜索者的好处:如果您想要一个耗尽列表,以确保您以随机方式使用所有项目,请执行以下操作:
//use the current time to seed random so it's different every time we run it
Random rand = new Random(DateTime.Now.ToString().GetHashCode());
var list = new List<string>{ "item1", "item2", "item3"};
//keep extracting from the list until it's depleted
while (list.Count > 0) {
int index = rand.Next(0, list.Count);
Console.WriteLine("Rand Item: " + list[index]);
list.RemoveAt(index);
}
答案 5 :(得分:0)
您有一些小错误。
您需要引用Rand
对象。您正在查看strings
而不是questions
。您正在删除元素而不是选择它。
试试这个:
void Main()
{
Random rand = new Random();
var questions = new List<string>{
"question1",
"question2",
"question3"};
int index = rand.Next(questions.Count);
return questions[index];
// If you want to use Linq then
// return questions.Skip(index).Take(1);
}
答案 6 :(得分:0)
这样的事情可能是你想要的:
private Random rng;
T PickRandom<T>(List<T> list)
{
return list[rng.NextInt(list.Count)];
}
您可以在列表中调用它以从中获取随机元素。