Я создаю небольшое консольное приложение. Я составил список с тремя вопросами. Как я могу позволить программе случайно выбрать вопрос и распечатать его внутри консоли?
Я пробовал несколько разных кодов, но, по-видимому, я почему-то не работал. Это последний код, который я пробовал, который я получил от другого пользователя с этого сайта, но я получаю ошибки:
"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;
}
}
Спасибо всем за ваши ответы. Я исправил свою проблему, создав массив вместо списка. Это мой код сейчас:
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)]);
}
}
Вам нужен статус 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]);
}
}
Для других поисковиков преимущество: если вы хотите список истощения, чтобы вы могли использовать все предметы случайным образом, сделайте следующее:
//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);
}
Вы уверены, что хотите удалить вопрос и вернуть остальные вопросы? Если вы не только выбрали один? Что-то вроде этого:
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]);
}
Попробуйте что-то вроде этого
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 должен быть инициализирован.
Что-то вроде этого может быть тем, что вы хотите:
private Random rng;
T PickRandom<T>(List<T> list)
{
return list[rng.NextInt(list.Count)];
}
Вы можете вызвать его в своем списке, чтобы получить из него случайный элемент.
Предполагаю, что вы хотите
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 в разделе замечаний для более подробной информации.
У вас есть пара незначительных ошибок.
Вам нужна ссылка на объект 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);
}