Java 如何为信用卡生成随机数

Java 如何为信用卡生成随机数,java,jakarta-ee,Java,Jakarta Ee,我创建了一个代码来生成一个随机的信用卡号,我使用这个方法返回一个基于用户输入的信用卡号。由于某种原因,我在返回值时遇到问题。请帮忙 public String getIssuerCode(String issuerSymbol) { String creditCardNumber = null; for (int i = 0; i < 15; i++) { switch (issuerSymbol) {

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

 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;
    }
公共字符串getIssuerCode(字符串issuerSymbol){
字符串creditCardNumber=null;
对于(int i=0;i<15;i++){
交换机(issuerSymbol){
案例发卡机构主卡:
creditCardNumber=generateMasterCard();
打破
案例发行人\u AMER\u EXPRESS:
creditCardNumber=generateAmericanExpress();
打破
案件签发人签证:
creditCardNumber=generateVisa();
打破
//System.out.println(“错误”);
违约:
打破
}
}
返回信用卡号;
}

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

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

您的问题是程序中有一个路径可能返回未初始化的字符串。如果“issuerSymbol”不是这三种情况中的任何一种,那么您将属于“默认情况”,即不会初始化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;
        }

可以随意将任何值作为默认值。就个人而言,“null”是一个很好的候选者,因为它立即表明发生了错误,但如果处理不当,它可能会使您稍后崩溃。因此,更安全的选择可能是任何字符串值,如“000-000-000”。

在您的情况下,问题是程序中有一个路径可能返回未初始化的字符串。如果“issuerSymbol”不是这三种情况中的任何一种,那么您将属于“默认情况”,即不会初始化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;
        }

可以随意将任何值作为默认值。就个人而言,“null”是一个很好的候选者,因为它立即表明发生了错误,但如果处理不当,它可能会使您稍后崩溃。因此,更安全的选择可能是任何字符串值,如“000-000-000”。

这里有一些事情

首先也是最重要的一点是,您的代码中有一个简单的输入错误,@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;
}
公共字符串getIssuerCode(字符串issuerSymbol){
字符串creditCardNumber=null;
对于(int i=0;i<15;i++){
交换机(issuerSymbol){
案例发卡机构主卡:
creditCardNumber=generateMasterCard();
打破
案例发行人\u AMER\u EXPRESS:
creditCardNumber=generateAmericanExpress();
打破
案件签发人签证:
creditCardNumber=generateVisa();
打破
违约:
打破
}
}
返回信用卡号;
}

编辑:

从您下面的评论中,我得出结论,具有此方法的类也具有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;
}
公共字符串getIssuerCode(){
字符串creditCardNumber=null;
对于(int i=0;i<15;i++){
开关(this.getIssuerSymbol()){
案例发卡机构主卡:
creditCardNumber=generateMasterCard();
打破
案例发行人\u AMER\u EXPRESS:
creditCardNumber=generateAmericanExpress();
打破
案件签发人签证:
creditCardNumber=generateVisa();
打破
违约:
打破
}
}
返回信用卡号;
}

这里发生了几件事

首先也是最重要的一点是,您的代码中有一个简单的输入错误,@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;
}
公共字符串getIssuerCode(字符串issuerSymbol){
字符串creditCardNumber=null;
对于(int i=0;i<15;i++){
交换机(issuerSymbol){
案例发卡机构主卡:
creditCardNumber=generateMasterCard();
打破
案例发行人\u AMER\u EXPRESS:
creditCardNumber=generateAmericanExpress();
打破
案件签发人签证:
creditCardNumber=generateVisa();
打破
违约:
打破
}
}
返回信用卡号;
}

编辑:

从您下面的评论中,我得出结论,具有此方法的类也具有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;
}
公共字符串getIssuerCode(){
字符串creditCardNumber=null;
对于(int i=0;i<15;i++){
开关(this.getIssuerSymbol()){
案例发卡机构主卡:
creditCardNumber=generateMasterCard();
打破