我创建了一个计算两个给定整数中所有匹配位数的方法。除了本地计数器外,该方法中的所有内容似乎都正常工作。
计数器在计算匹配位数直到最终递归迭代的过程中一直“工作”。然而,当递归工作时,最终(和期望的)值会丢失,因为之前的所有值都会循环通过,直到达到原始值。这意味着无论计数器在所有迭代过程中得到什么值,它仍然将始终返回0。
如何保存并返回计数器的最终值?任何帮助都将不胜感激,谢谢。
public static int match(int a, int b) {
return matchHelper(a, b, 0);
}
private static int matchHelper(int a, int b, int c) {
int count = c;
String strA = Integer.toString(a);
String strB = Integer.toString(b);
if (a < 0 || b < 0) {
throw new IllegalArgumentException();
} else {
// Check and count
if (strA.charAt(strA.length() - 1) == strB.charAt(strB.length() - 1)) {
count++;
}
// Remove last char and call again
if (strA.length() > 1 && strB.length() > 1) {
strA = strA.substring(0, strA.length() - 1);
strB = strB.substring(0, strB.length() - 1);
matchHelper(Integer.parseInt(strA), Integer.parseInt(strB), count);
}
}
return count;
}
注意:这个方法有很多要求和限制,导致它以这种方式编码(没有循环,没有结构化对象,必须是递归等等)。我相信有更好的办法。但是,我主要关心的是返回计数器的正确值。谢谢。
2条答案
按热度按时间fivyi3re1#
如何保存并返回计数器的最终值?
也许您应该将其重新表述为“如何保存计数器的返回值?”,答案是:使用返回值。
这就解决了问题。
你其实不需要
c
参数或helper方法(如果使用+=
取而代之的是:你的代码真的走得很慢,把数字转换成字符串只是为了提取最后一个数字。不要那样做,用除法和余数。
如果您坚持使用字符串,只需在开始时转换为字符串一次,然后向后“迭代”比较数字。
此答案中显示的所有4种解决方案产生相同的结果(
3
)测试时使用match(1236456789, 51782)
,自数字5
,7
,和8
是匹配的。ryevplcw2#
我认为应该在递归调用matchhelper之后将count的值赋值,请考虑以下代码