Java新手,在制作Luhn算法时遇到困难
提示要求我在下面使用public static,并且只使用递归。这是我使用Java的第一周,所以我的知识库很低。我在网上看到了一些Luhn算法的代码,但似乎没有一个使用布尔值作为第二个参数 基本上,我需要创建一个Luhn算法,它取每个值(从右到左),将第二个值加倍(布尔值用于确定数字是否加倍),然后将所有值相加。 例如:。 系统输出打印项次(sumLuhnDigits(7992739871005L,假)) 将返回72 我遇到的问题是关于“长”型的 Java告诉我需要先启动count变量,然后再将其设置为(数字%10)。。我假设这是因为我将它设置为+=并且它需要有值才能这样做。但是,在顶部将其设置为0会弄乱我试图制作的计数器 当我尝试返回count时,语法也不喜欢,说它不是“long”类型。 看来我目前也陷入了堆栈溢出错误。所以我需要打破递归Java新手,在制作Luhn算法时遇到困难,java,luhn,Java,Luhn,提示要求我在下面使用public static,并且只使用递归。这是我使用Java的第一周,所以我的知识库很低。我在网上看到了一些Luhn算法的代码,但似乎没有一个使用布尔值作为第二个参数 基本上,我需要创建一个Luhn算法,它取每个值(从右到左),将第二个值加倍(布尔值用于确定数字是否加倍),然后将所有值相加。 例如:。 系统输出打印项次(sumLuhnDigits(7992739871005L,假)) 将返回72 我遇到的问题是关于“长”型的 Java告诉我需要先启动count变量,然后再将
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;
}
}
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);
}
公共静态int-sumLuhnDigits(长数字,布尔奇数){
返回sumLuhnDigits(数字,奇数,0);
}
私有静态int-sumLuhnDigits(长数、布尔奇数、int计数){
如果(数字)
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);
}
公共静态int-sumLuhnDigits(长数字,布尔奇数){
返回sumLuhnDigits(数字,奇数,0);
}
私有静态int-sumLuhnDigits(长数、布尔奇数、int计数){
如果(数字以下不一定是正确答案,但涉及一些代码决策。什么时候计算什么。所以:通用编码
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;
}
- 最终条件(数字达到0)可以先完成
count
是一个局部变量。因为它甚至不是一个参数,所以它不会累积任何内容
- 但您可以将其添加到结果中
- 布尔值最好在没有
==false/true
的情况下使用
以下答案不一定正确,但涉及一些代码决策。关于何时计算什么。因此:通用编码
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;
}
- 最终条件(数字达到0)可以先完成
count
是一个局部变量。因为它甚至不是一个参数,所以它不会累积任何内容
- 但您可以将其添加到结果中
- 布尔值最好在没有
==false/true
的情况下使用
欢迎使用堆栈溢出。看起来你可能需要家庭作业帮助。虽然我们没有问题本身,请观察这些,并相应地编辑你的问题。(即使这不是家庭作业,也请考虑建议。)你忘了问一个问题。到底出了什么问题?如果
阻塞,最后一个如何计算?布尔奇数
必须既不为假,也不为真。这永远不会发生。(Sidenote@JoeC你从哪里得到的文本?我已经看到你发布了好几次了…)@JBNizet但是之前的逻辑也是错误的,编译器会抱怨缺少返回语句欢迎使用Stack Overflow!看起来您可能在寻求家庭作业帮助。虽然我们对此本身没有问题,但请注意这些,并相应地编辑您的问题。(即使这不是家庭作业,也请考虑这个建议。)你忘了问一个问题。到底出了什么问题?最后的<>代码>如果 Bog曾经评估过?布尔< <代码>奇数< /代码>将不必既不假也不假。这决不会发生。(Sidenote@JoeC你从哪里得到的文本?我已经看到你发布了好几次了…)@JBNizet但是之前的逻辑也是错误的,编译器会抱怨缺少返回语句。我会看看你的方法。谢谢!我注意到它对我帖子中的示例给出了90的响应,但是我需要看更多的代码才能更好地理解它。你的算法可能就是错误;)这里的解决方案很多,我看到了我的错误,我需要将两位数的值相加。再次感谢。我会看看你的方法。谢谢!我注意到它对我帖子中的示例给出了90%的响应,但我需要看更多的代码才能更好地理解它。你的算法可能就是错误;)这里的解决方案很多,我看到了我的错误,我需要将两位数的值相加。再次感谢。谢谢!我对这门语言还是很陌生,这很有帮助。谢谢!我对这门语言还是很陌生,这很有帮助。