Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java新手,在制作Luhn算法时遇到困难_Java_Luhn - Fatal编程技术网

Java新手,在制作Luhn算法时遇到困难

Java新手,在制作Luhn算法时遇到困难,java,luhn,Java,Luhn,提示要求我在下面使用public static,并且只使用递归。这是我使用Java的第一周,所以我的知识库很低。我在网上看到了一些Luhn算法的代码,但似乎没有一个使用布尔值作为第二个参数 基本上,我需要创建一个Luhn算法,它取每个值(从右到左),将第二个值加倍(布尔值用于确定数字是否加倍),然后将所有值相加。 例如:。 系统输出打印项次(sumLuhnDigits(7992739871005L,假)) 将返回72 我遇到的问题是关于“长”型的 Java告诉我需要先启动count变量,然后再将

提示要求我在下面使用public static,并且只使用递归。这是我使用Java的第一周,所以我的知识库很低。我在网上看到了一些Luhn算法的代码,但似乎没有一个使用布尔值作为第二个参数

基本上,我需要创建一个Luhn算法,它取每个值(从右到左),将第二个值加倍(布尔值用于确定数字是否加倍),然后将所有值相加。 例如:。 系统输出打印项次(sumLuhnDigits(7992739871005L,假))

将返回72

我遇到的问题是关于“长”型的

Java告诉我需要先启动count变量,然后再将其设置为(数字%10)。。我假设这是因为我将它设置为+=并且它需要有值才能这样做。但是,在顶部将其设置为0会弄乱我试图制作的计数器

当我尝试返回count时,语法也不喜欢,说它不是“long”类型。 看来我目前也陷入了堆栈溢出错误。所以我需要打破递归

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绝对是一个长型

  • 你没有积累任何东西,因为你正在递归和重置一个局部变量

  • 您可以尝试两种方法来传递计数(还有其他方法可以做同样的事情)。此外,我怀疑一个卡号加起来会超过一个最大整数

    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%的响应,但我需要看更多的代码才能更好地理解它。你的算法可能就是错误;)这里的解决方案很多,我看到了我的错误,我需要将两位数的值相加。再次感谢。谢谢!我对这门语言还是很陌生,这很有帮助。谢谢!我对这门语言还是很陌生,这很有帮助。