如何使用Luhn算法添加信用卡号

时间:2015-10-13 16:38:21

标签: java algorithm

我是一名新编程学生,我正在尝试使用Java编写一个算法来执行以下操作:

计算信用卡号码的每个其他数字(从倒数第二位开始),并将每位数乘以2。

取结果整数并将所有数字加在一起(即如果我得到14,6和2,我会加1 + 4 + 6 + 2)

到目前为止我所拥有的是:

            for(i = creditCard.length() - 2; i >= 1; i = i - 2){
            int x = Integer.parseInt(creditCard.substring(i,i+1));
            String y = Integer.toString(x);

              for(j = 0; j < y.length() - 1; j++){
                int z = Character.getNumericValue(y.charAt(j));
                unselectedSum = unselectedSum + z;
            }
          }

这将返回0作为unselectedSum

同样,我的编程知识非常有限,所以我很感激我能得到的任何帮助!

1 个答案:

答案 0 :(得分:2)

我希望您将变量unselectedSum初始化为0,如:

int unselectedSum = 0;

我从代码片段中看到的是一些你可能并不打算犯的错误。我将用一个例子来解释它。

String creditCard = 1234567812345678;

对于外循环的第一次迭代,creditCard.substring(i,i+1)将返回7,因为String.substring(int beginIndex, int endIndex)方法返回从beginIndex开始并以 {{结尾的字符串1}} ,包括两者。

接下来,在内循环中,您要求循环运行到endIndex-1

现在,由于y的长度为1,因此,条件减少到j < y.length() - 1,这是永远不会的,因此循环永远不会运行。这就是j<0的值在程序中没有变化的原因。

以下是解决该问题的另一种方法:

unselectedSum