首页
学习
活动
专区
圈层
工具
发布

Luhn算法
EN

Stack Overflow用户
提问于 2014-11-04 23:36:19
回答 1查看 611关注 0票数 0

( a)从检查数字开始,向左移动,计算所有已解码数字的和。( b)用整数除以10计算之和的其余部分。如果结果不是零,则信用卡号码无效。否则,卡号可能是有效的。

以下是两个例子:

代码语言:javascript
复制
        Card number: 2315778     Card number 1234567
        decode(8, false) = 8     decode(7, false) = 7
        decode(7, true)  = 5     decode(6, true)  = 3
        decode(7, false) = 7     decode(5, false) = 5
        decode(5, true)  = 1     decode(4, true)  = 8
        decode(1, false) = 1     decode(3, false) = 3
        decode(3, true)  = 6     decode(2, true)  = 4
        decode(2, false) = 2     decode(1, false) = 1

                    Sum = 30                 Sum = 31
               30 mod 10 = 0            31 mod 10 = 1
This number may be valid    This number is invalid

编写一个名为checkDigits的静态方法,该方法传递一个7位数字的信用卡号码,并执行上述步骤。重用您在Lab5.5.1中编写的解码方法。如果该数字通过测试,则该方法应返回“有效”一词,否则返回“无效”。

代码语言:javascript
复制
import java.util.Scanner;

public class JavaApplication90 
{
    public static void main(String[] args) 
    {
        Scanner scan = new Scanner(System.in);
        int num = 2315778;
        System.out.println("Credit card number: " + num + " is " + checkDigits(num));
        num = 1234567;
        System.out.println("Credit card number: " + num + " is " + checkDigits(num));
        num = 7654321;
        System.out.println("Credit card number: " + num + " is " + checkDigits(num));
        num = 1111111;
        System.out.println("Credit card number: " + num + " is " + checkDigits(num));
    }

    public static boolean checkDigits(int num)
    {
        int sum = 0;
        String reverse = new StringBuffer(num).reverse().toString();
        for (int i = 0; i < reverse.length(); i++){
            int product = 0;
            if (i % 2 == 0)
            {
                product = num * 2;
            }
            if (product < 9)
                product = (product%10)-1;
            sum = sum+ product   ;           
        }
        return (sum % 10 == 0);
    }
}

输出:

我得到了所有数字的真实/有效答案。我找不到我的错误。帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-04 23:50:53

至少有三个问题。

  • product为奇数的情况下,不设置i;因此,在这种情况下,product将为0,和将是错误的。
  • 实际上,您并不是在寻找num的第四位数字。您只是在每次引用num时都大量使用它,而应该使用类似于reverse.charAt(i)的东西。
  • 您正在创建的StringBuffer实际上是空的--您使用的构造函数没有执行您认为它所做的工作。这意味着您根本不迭代for循环。您可能应该检查Javadocs,以找到一个更合适的StringBuffer构造函数。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26747132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档