我有一个递归作业,我必须在控制台中输入以下数据:
1 2
1 3
3 4
2 3
3 5
4 5
有了这些数据,我必须显示所有可能的配对组合。对于每个单独的行,第一对中的第二个数字必须与后续对中的第一个数字相等,依此类推。我对这个作业有一个提示,我必须声明一个与函数相等的中间列表(从一开始就使用递归),但是当我尝试运行代码时,它给了我一个中间列表的空异常。
在第一个实例中,我将数据读取为二维数组,但使用简单的字符串数组进行了处理。 这是我到目前为止的代码,你能帮我提个建议吗,如何避免空异常? (抱歉,如果我在解释中遗漏了一些内容,这是我迄今为止在这里发表的第二篇文章,提前感谢您)。另外我必须提到的是,我可以只使用“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));
}
这是我得到 nullref 异常的地方,intermediaryList 中的每个值都是 null
这是正确的,除了添加返回空值数组的递归终止条件之外,您还可以在执行零工作后递归调用该函数。因此,第一次退出递归时,
intermediaryList
中有许多空元素,因此当您假装它们是字符串并尝试获取intermediaryList[j][1]
时,您将得到空引用异常。
至于解决方案,目前尚不清楚您分配的所有数组的用途。使用具有实际类型的
List<>
并正确完成工作。虽然我不想向你透露它,但如果我正确理解你的作业,解决方案将使用回溯和组合学,这比你这里的代码更多,结构也更好。
致敬,ai reusit sa o rezolvi?