如何为信用卡生成随机数

时间:2014-11-17 01:44:27

标签: java java-ee

我创建了一个生成随机信用卡号的代码,我使用此方法返回基于用户输入的信用卡号。出于某种原因,我在返回值时遇到问题。请帮助。

 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;
    }

5 个答案:

答案 0 :(得分:2)

你有几件事情在这里发生。

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

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。在这种情况下,你绝对应该这样做:

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;
}

答案 1 :(得分:1)

在您的情况下,问题是程序中有一个路径可能会返回未初始化的String。如果&#34; issuerSymbol&#34;在这三种情况中,您都不属于您的&#34;默认情况&#34;,它不会初始化您的creditCardNumber变量。

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

public String getIssuerCode(String issuerSymbol) {
         String creditCardNumber = null;
         ...
}

或更新您的默认案例

       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;
        }

随意将任何值作为默认值。个人&#34; null&#34;是一个很好的候选人,因为它立刻显示出现了错误,但如果不能正确处理,可能会让你以后崩溃。因此,更安全的选择可以是任何字符串值,例如&#34; 000-000-000&#34;。

答案 2 :(得分:1)

是的,好吧。如果你现在没有注意到,你只是拼错了卡#34;并写了#34; crad&#34;。 具体来说,您创建了一个变量String creditCradNumber; &lt; - 注意&#34; Crad&#34;而不是&#34;卡&#34;。

但是你在回复语句return creditCardNumber; &lt; - 现在它的卡片中拼写不同。

这很可能是你的问题。现在再看看你的代码,并确保现在检查变量的名称拼写,这样每次你想要使用它时它都保持不变。 :)

干杯。

编辑:如其他答案中所示,如果您的交换机上没有遇到任何案例,那么您的代码也存在无法初始化String creditCardNumber 的问题。将其初始化为null:

String creditCardNumber = null;

或在您的交换机上使用默认大小写:

default:
    creditCardNumber="000-000-000";
    break;

可以解决问题。

答案 3 :(得分:0)

在多个实例中设置而不是“creditCardNumber”时,您使用了名为“creditCradNumber”的变量。

答案 4 :(得分:0)

好的,只是为了调试你的“null”,你应该尝试添加更多的调试行:

 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”,那么您必须看到“卡片不是预期的类型之一!”。如果没有,这意味着您的函数generatedAmericanExpress()中存在问题,这就是返回null。