【问题标题】:Passing two 2dimensional arrays to method one after the other, C#将两个二维数组依次传递给方法,C#
【发布时间】:2021-01-07 18:49:40
【问题描述】:

我想用两个数独解决方案运行我的数独检查器(用底部的方法 CheckSudokuSolution 编写)。 我在传递参数方面不是很有经验,虽然我的研究不能做到这一点:

我需要首先将我的 1.Sudoku(在 Solution1 中)传递给方法 CheckSudokuSolution,然后是第二个(在 Solution2 中)。

我应该用 Solution1()、Solution2() 改变一些东西吗?

如果你有时间解释,我会很高兴。谢谢。

我的程序:

   static void Main(string[] args)
    {
        CheckSudokuSolution(s);
        
        CheckSudokuSolution(s);

        Console.ReadKey(true);
    }

    static void Solution1()
    {
        int[,] s = new int[,]
        {
            { 4,3,5,2,6,9,7,8,1},
            { 6,8,2,5,7,1,4,9,3},
            { 1,9,7,8,3,4,5,6,2},
            { 8,2,6,1,9,5,3,4,7},
            { 3,7,4,6,8,2,9,1,5},
            { 9,5,1,7,4,3,6,2,8},
            { 5,1,9,3,2,6,8,7,4},
            { 2,4,8,9,5,7,1,3,6},
            { 7,6,3,4,1,8,2,5,9}
        };
        
    }
    static void Solution2()
    {
        int[,] s = new int[,]
        {
            { 1,5,2,4,8,9,3,7,6},
            { 7,3,9,2,5,6,8,4,1},
            { 4,6,8,3,7,1,2,9,5},
            { 3,8,7,1,2,4,6,5,9},
            { 5,9,1,7,6,3,4,2,8},
            { 2,4,6,8,9,5,7,1,3},
            { 9,1,4,6,3,7,5,8,7},
            { 6,2,5,9,4,8,1,3,7},
            { 8,7,3,5,1,2,9,6,4}
        };
        
    }

    static void CheckSudokuSolution(int[,] s )
    {
           // code 
    }

【问题讨论】:

  • 您需要将Solution1Solution2 return 设为它们创建的数组,以便将其传递给CheckSudokuSolution

标签: c# arrays parameter-passing


【解决方案1】:

Main() 中,您没有名为s 的变量,因此您当前拥有的变量会出错。我建议将Solution1 设为静态变量而不是函数:

    static int[,] Solution1 = new int[,]
        {
            { 4,3,5,2,6,9,7,8,1},
            { 6,8,2,5,7,1,4,9,3},
            { 1,9,7,8,3,4,5,6,2},
            { 8,2,6,1,9,5,3,4,7},
            { 3,7,4,6,8,2,9,1,5},
            { 9,5,1,7,4,3,6,2,8},
            { 5,1,9,3,2,6,8,7,4},
            { 2,4,8,9,5,7,1,3,6},
            { 7,6,3,4,1,8,2,5,9}
        };
        

现在可以直接传入了:

        CheckSudokuSolution(Solution1);

Solution2 也是如此。

【讨论】:

  • 对我来说很重要,两个数组具有相同的名称,因为我想进一步使用,你的回答不遵循这个原则。
  • 在这个级别,它们可以有不同的名称,您仍然可以在CheckSudokuSolution() 中随意使用它们。我建议您阅读有关变量范围和参数传递的更多信息。
【解决方案2】:

不确定是否了解所有要点,但您可以首先使用类从主目录中查看您的数组:

  • 将您的数组发送到 CheckSudokuSolution()。
  • 检查返回值。

示例:

static void Main(string[] args)
    {
        int[,] s1 = CheckSudokuSolution(Solutions.s1);

        int[,] s2 = CheckSudokuSolution(Solutions.s2);


        // display sudoku s1

        int i = 0;
        foreach (var item in s1)
        {
            if (i == 9)
            {
                Console.WriteLine();
                i = 0;
            }
            Console.Write(item.ToString());
            i++;
        }
        Console.ReadKey(true);
    }

    public static class Solutions
    {
        public static int[,] s1 = new int[,]
        {
        { 4,3,5,2,6,9,7,8,1},
        { 6,8,2,5,7,1,4,9,3},
        { 1,9,7,8,3,4,5,6,2},
        { 8,2,6,1,9,5,3,4,7},
        { 3,7,4,6,8,2,9,1,5},
        { 9,5,1,7,4,3,6,2,8},
        { 5,1,9,3,2,6,8,7,4},
        { 2,4,8,9,5,7,1,3,6},
        { 7,6,3,4,1,8,2,5,9}
        };

        public static int[,] s2 = new int[,]
        {
        { 1,5,2,4,8,9,3,7,6},
        { 7,3,9,2,5,6,8,4,1},
        { 4,6,8,3,7,1,2,9,5},
        { 3,8,7,1,2,4,6,5,9},
        { 5,9,1,7,6,3,4,2,8},
        { 2,4,6,8,9,5,7,1,3},
        { 9,1,4,6,3,7,5,8,7},
        { 6,2,5,9,4,8,1,3,7},
        { 8,7,3,5,1,2,9,6,4}
        };
    }
    static int[,] CheckSudokuSolution(int[,] s)
    {
        // Do something with s
        return s;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 2023-03-16
    • 2021-05-10
    • 1970-01-01
    相关资源
    最近更新 更多