【问题标题】:Trying to return a 2d array from a method试图从一个方法返回一个二维数组
【发布时间】:2022-12-10 01:04:17
【问题描述】:

制作 Hangman 游戏。我希望在此函数中获取已在我的代码中其他地方验证过的“答案”,并将其拆分为单独的字母,然后是 Hangman 等效代表。
例如。:

abc == ___   
hi world == __/_____ and so on..

我正在使用二维数组“UncoveredArray”来保存这些数据。我现在想将它返回到我的主程序,以便它可以以另一种方法用于游戏的下一步。

static void Main(string[] args)
{            
    NewGame Hangman = new NewGame();
    string Answer = Hangman.GetWord();
    
    var UncoveredArray = new char[Answer.Length, 2];       

    UncoveredArray = Hangman.ProcessWord(Answer, out UncoveredArray);
public char[] ProcessWord(string Answer, out char UncoveredArray)
{
    char[] chars = Answer.ToCharArray();
    var UncoveredArray = new char[chars.Length, 2];

    for (int i = 0; i < Answer.Length; i++)
    {
        if (chars[i] == ' ')
        {
            Console.Write("/");
            UncoveredArray[i, 0] = chars[i];
            UncoveredArray[i, 1] = '/';
        }
        else if (char.IsPunctuation(chars[i]))
        {
            Console.Write(chars[i]);
            UncoveredArray[i, 0] = chars[i];
            UncoveredArray[i, 1] = chars[i];
        }
        else
        {
            Console.Write("_");

            UncoveredArray[i, 0] = chars[i];
            UncoveredArray[i, 1] = '_';
        }
    }
    return UncoveredArray;
    //TODO: RETURN ARRAY 
}

【问题讨论】:

标签: c# arrays return


【解决方案1】:

混乱源于不必要地使用 out 参数。简化事情:只返回一个新实例

public char[,] ProcessWord(string answer) {} //logic remains more or less the same

//in Main() use it like
char[,] uncoveredArray = hangman.ProcessWord(answer);

请注意,在您的原始方法中,您将 char[,] UncoveredArray 作为输出参数传递,然后立即地var UncoveredArray = new char[chars.Length, 2]; 补鞋。这不仅毫无意义,而且甚至无法编译。请注意,您永远不想尝试创建一个具有相同名称的新变量,尤其是当它是参数名称时。据我所知,C# 不支持像 Rust 的“阴影”这样的东西,它允许这种现象

此外,返回类型必须是 char[,] 而不是 char[]。第一个是实际的二维数组,而第二个是一维

在这种情况下,使用显式键入而不是 var 会有很大帮助。请务必遵循变量、类和方法的正确命名约定

【讨论】:

  • 这很好用。将 char[] 更改为 char[,] 并删除 out 然后更改调用。注释掉其他代码,效果很好。然后我测试了这些值是否正确传递。谢谢!!
猜你喜欢
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-07
相关资源
最近更新 更多