首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为信用卡生成随机数字

问如何为信用卡生成随机数字
EN

Stack Overflow用户
提问于 2014-11-17 01:44:26
回答 5查看 1.7K关注 0票数 0

我创建了一个代码来生成一个随机的信用卡号码,并且我使用这个方法返回一个基于用户输入的信用卡号码。由于某些原因,我在返回值时遇到了问题。请帮帮忙。

代码语言:javascript
复制
 public String getIssuerCode(String issuerSymbol) {
        String creditCardNumber = null;

        for (int i = 0; i < 15; i++) {

            switch (issuerSymbol) {
                case ISSUER_MASTER_CARD:

                  creditCardNumber   = generateMasterCard();
                    break;
                case ISSUER_AMER_EXPRESS:
             creditCardNumber   = generateAmericanExpress();
                    break;
                case ISSUER_VISA:
                 creditCardNumber   = generateVisa();
                    break;
                // System.out.println("error");
                default:
                    break;
            }

        }

        return creditCardNumber;
    }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-11-17 02:30:28

好的,为了调试"null",您应该尝试添加更多的调试行:

代码语言:javascript
复制
 public String getIssuerCode(String issuerSymbol) {
    String creditCardNumber = null;

    System.out.println(issuerSymbol);

    switch (issuerSymbol) {
        case ISSUER_MASTER_CARD:
            System.out.println("Card was of type: " + ISSUER_MASTER_CARD);
            creditCardNumber = generateMasterCard();
            break;
        case ISSUER_AMER_EXPRESS:
             System.out.println("Card was of type: " + ISSUER_AMER_EXPRESS);
             creditCardNumber = generateAmericanExpress();
             break;
        case ISSUER_VISA:
             System.out.println("Card was of type: " + ISSUER_VISA);
             creditCardNumber = generateVisa();
             break;
        default:
             System.out.println("Card is NOT one of the expected type!");
             break;
        }
    }

    System.out.println("Generated credit card number is : " + creditCardNumber);

    return creditCardNumber;
}

如果您有"null",那么您必须看到"Card不是预期的类型之一!“如果不是,这意味着函数generatedAmericanExpress()中有一个问题,这就是返回null的内容。

票数 0
EN

Stack Overflow用户

发布于 2014-11-17 02:01:25

你这里有几件事要做。

首先,您的代码中有一个简单的错误,正如@brycem在他的回答中已经告诉您的那样。其次,在for-循环和switch语句之后,creditCardNumber可能还没有初始化.这意味着没有给它分配任何值。这可能是不可能发生的,但您的编译器不知道。因此,一个简单的解决方法是在开始时将其分配给null:

代码语言:javascript
复制
public String getIssuerCode(String issuerSymbol) {
    String creditCardNumber = null;

    for (int i = 0; i < 15; i++) {

        switch (issuerSymbol) {
            case ISSUER_MASTER_CARD :
                creditCardNumber = generateMasterCard();
                break;
            case ISSUER_AMER_EXPRESS :
                creditCardNumber = generateAmericanExpress();
                break;
            case ISSUER_VISA:
                creditCardNumber = generateVisa();
                break;
            default:
                break;
        }

    }

    return creditCardNumber;
}

编辑:

从下面的评论中,我得出的结论是,具有此方法的类也具有issuerNumber。在这种情况下,您肯定应该这样做:

代码语言:javascript
复制
public String getIssuerCode() {
    String creditCardNumber = null;

    for (int i = 0; i < 15; i++) {

        switch (this.getIssuerSymbol()) {
            case ISSUER_MASTER_CARD :
                creditCardNumber = generateMasterCard();
                break;
            case ISSUER_AMER_EXPRESS :
                creditCardNumber = generateAmericanExpress();
                break;
            case ISSUER_VISA:
                creditCardNumber = generateVisa();
                break;
            default:
                break;
        }

    }

    return creditCardNumber;
}
票数 2
EN

Stack Overflow用户

发布于 2014-11-17 01:59:05

在您的情况下,问题是程序中有一条路径可能返回未初始化的字符串。如果"issuerSymbol“不是这三种情况中的任何一种,那么您将陷入”默认情况“,这不会初始化您的creditCardNumber变量。

解决方案是在第2行给变量creditCardNumber一个默认值:

代码语言:javascript
复制
public String getIssuerCode(String issuerSymbol) {
         String creditCardNumber = null;
         ...
}

或更新默认情况。

代码语言:javascript
复制
       switch (issuerSymbol) {
            case ISSUER_MASTER_CARD :
             creditCradNumber = generateMasterCard();
                break;
            case ISSUER_AMER_EXPRESS :
               creditCardNumber = generateAmericanExpress();
                break;
            case ISSUER_VISA:
               creditCardNumber = generateVisa();
                break;
            default:
               creditCardNumber = "000-000-000";
               break;
        }

请随意将任何值作为默认值。就个人而言,"null“是一个很好的候选,因为它立即显示出发生了一些错误,但是如果不能正确地处理它,它可能会使您在以后崩溃。因此,更安全的选择可能是任何字符串值,比如"000-000-000“。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26964288

复制
相关文章

相似问题

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