新手程序员求助:C#代码实参不匹配问题修复
解决“没有与所需的形参'l'对应的实参”编译错误
嘿,我一眼就看到你遇到的问题了——这是个典型的参数不匹配编译错误,咱们一步步来解决:
直接的编译错误原因
你定义的How_many_can方法需要6个参数:
static int How_many_can(int n, int sum, int how_many_can, int m, int k,string l)
但在Main方法里调用时只传了5个:
Console.WriteLine(How_many_can(n, sum, how_many_can, m,l));
漏掉了k这个必填参数,这就是编译器报错的核心原因。
修复步骤
1. 修正方法调用参数
你在Main里已经计算了k = l.Count();,只需要把它加到调用参数里就行:
Console.WriteLine(How_many_can(n, sum, how_many_can, m, k, l));
2. 修复递归逻辑的隐藏Bug
除了编译错误,你的代码还有几个逻辑问题会导致运行结果不符合预期,我一起帮你修正:
- sum未重置:每次递归累加sum后,下次递归时sum会保留之前的数值,需要在每次进入方法时重置为0;
- m的初始值错误:递归时传入的m是上一次循环后被除到0的值,应该用当前n的数值重新初始化;
- 终止条件不合理:当前的
if (sum > n)判断不准确,改成当n≤0时停止递归更合理。
修正后的完整代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace How_many_can { class Program { static void Main(string[] args) { var n = Int32.Parse(Console.ReadLine()); int sum = 0; int how_many_can = 0; var l = n.ToString(); var k = l.Count(); Console.WriteLine(How_many_can(n, sum, how_many_can, k)); } // 简化参数列表,将m、l移到方法内部计算,避免冗余参数 static int How_many_can(int n, int sum, int how_many_can, int k) { // 终止条件:当n已经不足以再减去数位和时停止 if (n <= 0) { return how_many_can; } sum = 0; int m = n; // 每次用当前n初始化m,保证数位计算正确 for (int i = 0; i < k; i++) { sum += m % 10; m /= 10; } how_many_can += 1; n -= sum; var l = n.ToString(); k = l.Count(); return How_many_can(n, sum, how_many_can, k); } } }
额外说明
我还简化了方法的参数列表,把不需要传递的m和l移到方法内部计算,这样代码更简洁,也能减少参数传递出错的概率。你可以运行修正后的代码,看看是否符合你的预期~
内容的提问来源于stack exchange,提问作者Kachunskyy Igor
相关产品推荐
相关产品推荐

