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();
打破