多米诺递归

问题描述 投票:0回答:2

我有一个递归作业,我必须在控制台中输入以下数据:

  • 在第一行,一个自然数等于我必须在以下几行输入的图块数量(在我的示例中,第一个数字是 6)。
  • 在下面的行中,多米诺骨牌按以下顺序排列:

1 2

1 3

3 4

2 3

3 5

4 5

  • 在最后一行,另一个数字表示需要在每行上返回的图块数量(在我的示例中,该数字等于 3)。

有了这些数据,我必须显示所有可能的配对组合。对于每个单独的行,第一对中的第二个数字必须与后续对中的第一个数字相等,依此类推。我对这个作业有一个提示,我必须声明一个与函数相等的中间列表(从一开始就使用递归),但是当我尝试运行代码时,它给了我一个中间列表的空异常。

在第一个实例中,我将数据读取为二维数组,但使用简单的字符串数组进行了处理。 这是我到目前为止的代码,你能帮我提个建议吗,如何避免空异常? (抱歉,如果我在解释中遗漏了一些内容,这是我迄今为止在这里发表的第二篇文章,提前感谢您)。另外我必须提到的是,我可以只使用“using System;”不允许使用 Linq 或其他任何东西。

enter code here

static string[] ReadDominoTiles(int n)
        {
            string[] input = new string[n];
            for (int i = 0; i < n; i++)
            {
                input[i] = Console.ReadLine();
            }

            return input;
        }

        static string[] DominoSolution(string[] dominoTiles, int numberOfPairs)
        {
            string[] finalList = new string[numberOfPairs];

            if (numberOfPairs == 1)
            {
                return finalList;
            }

            string[] intermediaryList = DominoSolution(dominoTiles, numberOfPairs - 1);
            for (int i = 0; i < intermediaryList.Length; i++)
            {
                for (int j = 0; j < dominoTiles.Length; j++)
                {
                   // This is where I get the nullref exception, every value from intermediaryList is null
                    if (intermediaryList[i] != dominoTiles[j] && intermediaryList[j][1] == dominoTiles[j][0])
                    {
                        finalList[j] += intermediaryList[j] + " " + dominoTiles[j];
                    }
                }
            }

            return finalList;
        }

        static void Main(string[] args)
        {
            int n = Convert.ToInt32(Console.ReadLine());
            string[] dominoTiles = ReadDominoTiles(n);
            int numberOfPairs = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine(DominoSolution(dominoTiles, numberOfPairs));
        }
c# recursion
2个回答
1
投票

这是我得到 nullref 异常的地方,intermediaryList 中的每个值都是 null

这是正确的,除了添加返回空值数组的递归终止条件之外,您还可以在执行零工作后递归调用该函数。因此,第一次退出递归时,

intermediaryList
中有许多空元素,因此当您假装它们是字符串并尝试获取
intermediaryList[j][1]
时,您将得到空引用异常。

至于解决方案,目前尚不清楚您分配的所有数组的用途。使用具有实际类型的

List<>
并正确完成工作。虽然我不想向你透露它,但如果我正确理解你的作业,解决方案将使用回溯和组合学,这比你这里的代码更多,结构也更好。


0
投票

致敬,ai reusit sa o rezolvi?

© www.soinside.com 2019 - 2024. All rights reserved.