2013-12-16 3 views
-3

Моя программа палач работает правильно, хотя я пытаюсь создать раздел кода, который выполняет простую задачу.Создайте массив с динамическим размером?

Я хочу создать модуль, в котором, когда пользователь вводит слово (строку), он выделяет это слово в массив, и этот процесс может повторяться до тех пор, пока они не почувствуют, что они создали достаточное количество слов и выходят из этого раздела в сама игра. Я пробовал часть этого кода, но я действительно борюсь со строковым массивом и как он может динамически увеличиваться в размере, исходя из того, сколько слов вводит пользователь.

Как создать массив, который добавляется в новую строку каждый раз, когда пользователь нажимает кнопку ввода до тех пор, пока не создаст столько слов, сколько пожелает?

static string UserQuestions() 
{ 
    Console.WriteLine("Please input your words, press 1 when you have finished"); 
    string UserInput = new string[Console.ReadLine()[0]]; 

    for (int i = 0; i < UserInput; i++) 
    { 
    } 

    if (UserQuestionsExit == 1) ; 
    { 
     break; 
    } 
    return UserInput; 
} 

Мой второй вопрос у меня возникают проблемы, связывающие новый список до случайного генератора, который будет случайным образом выбрать одно из этих слов из списка и возвращает его в виде строки, которые будут использоваться в моей игре палача?

static char UservsUserRandom(string userQuestion) 
{ 
    Random rnd = new Random(); 
    int response = rnd.Next(0,userQuestion.Length); 
    char randWord ; 
    { 
     randWord = userQuestion[response]; 
    } 
    return randWord; 
} 

var userQuestion = UserQuestions(); 
value = UservsUserRandom(userQuestion); 
char[] newValue = new char[value.Length]; 
+2

Попробуйте использовать альтернативную структуру данных, такую ​​как ArrayList или общий список. – Zach

+0

Массивы не имеют динамического размера, вместо этого попробуйте использовать список или arraylist. – Brian

+1

@ Zach - Великие умы, друг мой ... – Brian

ответ

5

размеры массива фиксируются в .NET, так что если вы не знаете, сколько элементов вам может понадобиться прочитать, это, вероятно, не является хорошим вариантом. Используйте List<string> вместо:

var userInput = new List<string>(); 
while(true) 
{ 
    var lastInput = Console.ReadLine(); 
    if (lastInput.Length > 0) 
    { 
     userInput.Add(lastInput); 
    } 
    else 
    { 
     break; 
    } 
} 

Списки фактически опирается на массивы, но они позволяют эффективно добавлять и удалять элементы динамически. При необходимости он автоматически изменит размер внутреннего массива, чтобы разместить больше предметов.


Что касается вашего обновления, чтобы выбрать случайную строку из этого списка вы можете использовать метод, как это:

private static Random rnd = new Random(); 

static string GetRandomString(List<string> inputStrings) 
{ 
    int response = rnd.Next(0, inputStrings.Length); 
    string randWord = inputStrings[response]; 
    return randWord; 
} 

Обратите внимание, что я переместил Random вне рассматриваемого метода. Это будет полезно, если вам нужно будет вызвать этот метод несколько раз за короткий промежуток времени. Вы можете использовать этот метод, как это:

var userQuestion = UserQuestions(); 
string selectedString = GetRandomString(userQuestion); 
... 

Кроме того, если вам нужно преобразовать string в char, самый простой способ заключается в использовании ToCharArray:

char[] charArray = selectedString.ToCharArray(); 
+0

У меня возникли проблемы с реализацией этого списка в остальной части моего кода, этот раздел работал нормально, но у меня возникли проблемы с первым названием этого метода, теперь его список, а во-вторых, как я могу отправить этот список до случайный генератор для случайного выбора слова. Может ли кто-нибудь помочь в этом? – user3084866

+0

Убедитесь, что у вас есть 'using System.Collections.Generic' в верхней части файла. Чтобы передать список внутри вашей программы, просто введите тип возвращаемого значения или тип параметра «Список » вместо 'string'. –

+0

Я не собираюсь занимать много времени, но если бы я прокомментировал свою работу, чтобы дать вам представление о том, как ее работа, по-вашему, вы могли бы попытаться подобрать, где ive пошло не так, и как я должен это делать? Я не ищу, чтобы кто-то сделал это для меня, я просто хочу узнать, как это сделать. – user3084866

1

Как вы это вы не используйте массив, вы используете List - который подобен массиву, за исключением того, что он предназначен для того, чтобы иметь в нем произвольное количество элементов.

List<string> items = new List<string>(); 
string userInput = Console.ReadLine(); 
while (userInput != "1") 
{ 
    items.Add(userInput); 
    userInput = Console.ReadLine(); 
} 
0

Вы пробовали список? Массивы не могут реально динамически расширяться и в принципе не должны. есть список:

List<string> words = new List<string>(); 
    words.Add("new word"); 

, когда пользователь нажимает 1, вы можете просто words.ToArray(), чтобы сделать это массив, или продолжать использовать его в качестве списка. Надеюсь, поможет!

Смежные вопросы