创建一个动态大小的数组?

时间:2013-12-16 20:56:03

标签: c# arrays

我的hangman程序运行正常,虽然我正在尝试创建一段执行简单任务的代码。

我希望创建一个模块,当用户输入一个单词(字符串)时,它会将这个单词分配给一个数组,并且可以重复这个过程,直到他们觉得他们已经创建了足够多的单词并退出该部分进入游戏本身。我已经尝试了这段代码的一部分,但我真的很挣扎字符串数组,以及它如何根据用户输入的字数动态增加大小。

每次用户按Enter键时,如何创建一个添加新字符串的数组,直到他们创建了任意数量的单词?

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;
}

我的第二个问题是我无法将新列表链接到随机生成器,该生成器将从列表中随机选择其中一个单词并将其作为字符串返回以用于我的hangman游戏?< /强>

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];

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

你是如何做到的,你不使用数组,你使用一个List - 就像一个数组,除了它被设计为包含任意数量的项目。

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

答案 2 :(得分:0)

你试过一个List吗?数组不能真正动态扩展,基本上不应该。 有一个清单:

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

当用户按下1时,你可以简单地单词.ToArray()使其成为一个数组,或继续使用它作为列表。希望它有所帮助!