【问题标题】:How do I set a constructor's parameters to an array of variable size?如何将构造函数的参数设置为可变大小的数组?
【发布时间】:2013-05-10 23:34:19
【问题描述】:

家庭作业:我们正在制定一个刽子手计划。我有以下方法:

    public char[] selectWord()
    {
        String[] hangmanWords = new String[50] { "time", "person", "year", "way", "day", "thing", "man", "world", "life", "hand", "part", "child", "eye", "woman", "place", "work", "week", "case", "point", "government", "company", "number", "group", "problem", "fact", "good", "new", "first", "last", "long", "great", "little", "own", "other", "old", "right", "big", "high", "different", "small", "large", "next", "early", "young", "important", "few", "public", "bad", "same", "able" };
        Random wordIndex = new Random();
        int randomIndex = wordIndex.Next(0, 49); 
        wordToGuess = hangmanWords[randomIndex].ToUpper();
        char[] wordToGuessArray = wordToGuess.ToCharArray();                                         // convert word to array of letters
        return wordToGuessArray;  
    }

我想为wordToGuessArray 定义一个构造函数。理想情况下,我希望 selectWord() 方法设置 wordToGuessArray 参数。但是,在我运行此方法之前,我不会知道变量数组长度,并且如果不明确定义char[x],我将无法创建构造函数。 This question 在 main 中设置了数组长度。由于任务中的要求限制,我的不能。那么这个selectWord() 方法需要在哪里才能正确set 我的变量?

我很难想象一个可行的程序流程。

【问题讨论】:

  • 不清楚您想要什么,部分原因是您的术语混淆了(“创建构造函数”可能意味着“声明变量”?)。你能展示你希望你的代码完成后的样子吗?

标签: c# arrays parameters constructor


【解决方案1】:

我认为你有些困惑。 char[] wordToGuessArray = wordToGuess.ToCharArray(); 不仅为您分配正确大小的数组,还使用 ​​wordToGuess 的内容填充它。我有两个建议的更改以使您的代码更好。

public char[] selectWord()
{
    // get rid of size in this, when you do static init you don't need it
    String[] hangmanWords = new String[] { "time", "person", "year", "way", "day", "thing", "man", "world", "life", "hand", "part", "child", "eye", "woman", "place", "work", "week", "case", "point", "government", "company", "number", "group", "problem", "fact", "good", "new", "first", "last", "long", "great", "little", "own", "other", "old", "right", "big", "high", "different", "small", "large", "next", "early", "young", "important", "few", "public", "bad", "same", "able" };
    // combinme those bottom 5 or so lines into 1.
    return hangmanWords[new Random.Next(0, 49)].ToUpper().ToCharArray();
}

此方法将简单地返回一个字符数组,其中包含从hangmanWords 数组中随机选择的单词的字符。我相信这就是你想要的,对吧?

如果您希望字符数组 wordToGuessArray 成为您的类的属性,那么只需将其声明为 public char[] wordsToGuessArray { get; set; } 并将方法设为无效,将返回替换为 wordsToGuessArray 的赋值。

示例构造函数;

 // field declared in my class, call it game
 public char[] wordsToGuessArray { get; set; }

 public Game(char[] word)
 {
       wordToGuessArray = word;
 }
 // call it like this
 Game game = new Game(selectWord());

如果你想在构造函数中设置wordToGuessArray,你可以在同一个类中创建selectWord()一个public static方法,在这种情况下你可以像Game.selectWord()一样调用它

【讨论】:

  • 是的,但是我正在尝试将随机选择的单词传递给构造函数,以便我可以从项目中的任何类中调用它。除非我有数组长度,否则我无法设置构造函数及其参数,对吧?
  • 哦,我想我现在是你的意思。我将使用示例构造函数进行编辑。您不必知道数组长度。
【解决方案2】:

您可以寻找param 关键字。它允许您将不确定数量的参数传递给构造函数,如下例所示:

public static void UseParams2(params object[] list) 
{
   for ( int i = 0 ; i < list.Length ; i++ )
      Console.WriteLine(list[i]);
   Console.WriteLine();
}

归入您的帖子,您的代码可能如下所示:

public char[] selectWord(params string[] hangmanWords)
{
    Random wordIndex = new Random();
    int randomIndex = wordIndex.Next(0, hangmanWords.Count()); 
    wordToGuess = hangmanWords[randomIndex].ToUpper();
    char[] wordToGuessArray = wordToGuess.ToCharArray();                                         // convert word to array of letters
    return wordToGuessArray;  
}

【讨论】:

  • 我认为这不是 OP 想要的,但不确定。
  • 我也是,我或多或少在猜测,如果它不是他想要的,它仍然不会伤害任何人;-)
猜你喜欢
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多