Java 的新手,在制作 Luhn 算法时遇到问题
New to Java, having trouble making a Luhn algorithm
提示要求我在下面有 public 静态并且只使用递归。这是我使用 Java 的第一周,所以我的知识基础很低。我在网上看到了 Luhn 算法的一些代码,但其中 none 似乎使用布尔值作为第二个参数。
基本上我需要创建一个 Luhn 算法,它取每个值(从右到左),将第二个值加倍(布尔值用于确定数字是否加倍)然后添加所有价值观在一起。
例如)。
System.out.println(sumLuhnDigits(7992739871005L, false));
会 return 72
我 运行 遇到的问题是 'long' 类型。
Java 告诉我需要先启动计数变量,然后再将其设置为 (number%10).. 等。我假设那是因为我将其设置为 += 并且它需要为了这样做的价值。然而,在顶部将它设置为 0 会弄乱我试图制作的计数器。
当我尝试 return 计数时,语法也不喜欢,说它不是 'long' 类型。
看来我目前也陷入了 Whosebug 错误。所以我需要打破递归。
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;
}
}
count绝对是long类型
您没有积累任何东西,因为您正在递归和重置局部变量。
您可以尝试两种方法来传递计数(还有其他方法可以做同样的事情)。另外,我怀疑卡号加起来会超过整数最大值。
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);
}
以下不一定是正确答案,但涉及一些代码决策。 当计算什么。所以:通用编码。
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 静态并且只使用递归。这是我使用 Java 的第一周,所以我的知识基础很低。我在网上看到了 Luhn 算法的一些代码,但其中 none 似乎使用布尔值作为第二个参数。
基本上我需要创建一个 Luhn 算法,它取每个值(从右到左),将第二个值加倍(布尔值用于确定数字是否加倍)然后添加所有价值观在一起。 例如)。 System.out.println(sumLuhnDigits(7992739871005L, false));
会 return 72
我 运行 遇到的问题是 'long' 类型。
Java 告诉我需要先启动计数变量,然后再将其设置为 (number%10).. 等。我假设那是因为我将其设置为 += 并且它需要为了这样做的价值。然而,在顶部将它设置为 0 会弄乱我试图制作的计数器。
当我尝试 return 计数时,语法也不喜欢,说它不是 'long' 类型。 看来我目前也陷入了 Whosebug 错误。所以我需要打破递归。
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;
}
}
count绝对是long类型
您没有积累任何东西,因为您正在递归和重置局部变量。
您可以尝试两种方法来传递计数(还有其他方法可以做同样的事情)。另外,我怀疑卡号加起来会超过整数最大值。
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);
}
以下不一定是正确答案,但涉及一些代码决策。 当计算什么。所以:通用编码。
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
更好地使用布尔值。