提示要求我在下面使用public static并且只使用递归。这是我使用Java的第一周,所以我的知识库非常低。我在网上看到了Luhn算法的一些代码,但似乎都没有使用布尔值作为第二个参数。
基本上我需要创建一个Luhn算法,它取每个值(从右到左),使第二个值加倍(布尔值用于确定数字是否加倍)然后将所有值加在一起。 对于前)。 System.out.println(sumLuhnDigits(7992739871005L,false));
将返回72
我遇到的问题是关于“长期”问题。类型。
Java告诉我在设置等于(数字%10)之前我需要启动count变量..等等我认为这是因为我把它设置为+ =并且它需要有值为了做到这一点。然而,在顶部将它设置为等于0,与我试图制作的计数器混淆。
当我尝试返回计数时,语法也不是这样,说它不是一个很长的'类型。 我似乎目前也陷入了stackoverflow错误。所以我需要打破递归。
public static long sumLuhnDigits(long number, boolean odd) {
/// Java IDE said I needed to initiate the variable count but now it won't accumulate properly being set = 0
long count = 0;
if (odd == false) {
count += number % 10;
number = number / 10;
odd = true;
return sumLuhnDigits(number, odd);
} if (odd == true) {
count += (number % 10) * 2;
number = number / 10;
odd = false;
return sumLuhnDigits(number, odd);
/// Here I ran into the problem that count is not the type long, this is also as far as I have gotten
} if (number == 0) {
return count;
}
}
答案 0 :(得分:3)
Count绝对是一个长型
由于您正在递归并重置本地变量,因此您不会累积任何内容。
您可以尝试两种方法来传递计数(还有其他方法可以做同样的事情)。此外,我怀疑卡号将加起来超过整数最大值。
public static int sumLuhnDigits(long number, boolean odd) {
return sumLuhnDigits(number, odd, 0);
}
private static int sumLuhnDigits(long number, boolean odd, int count) {
if (number <= 0) return count;
if (!odd) {
count += number % 10;
} else {
count += (number % 10) * 2;
}
number = number / 10;
odd = !odd;
return sumLuhnDigits(number, odd, count);
}
答案 1 :(得分:2)
以下不一定是正确的答案,但会处理一些代码决策。 何时计算什么。所以:多功能编码。
public static long sumLuhnDigits(long number, boolean odd) {
if (number == 0) {
return 0;
}
long count;
if (!odd) {
count = number % 10;
} else {
count = (number % 10) * 2;
}
return sumLuhnDigits(number / 10, !odd) + count;
}
count
是一个局部变量。因为它甚至不是参数,所以它不会累积任何东西。== false/true
的情况下更好地使用布尔值。