我创建了一个生成随机信用卡号的代码,我使用此方法返回基于用户输入的信用卡号。出于某种原因,我在返回值时遇到问题。请帮助。
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;
}
答案 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。