我创建了一个代码来生成一个随机的信用卡号码,并且我使用这个方法返回一个基于用户输入的信用卡号码。由于某些原因,我在返回值时遇到了问题。请帮帮忙。
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;
}发布于 2014-11-17 02:30:28
好的,为了调试"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",那么您必须看到"Card不是预期的类型之一!“如果不是,这意味着函数generatedAmericanExpress()中有一个问题,这就是返回null的内容。
发布于 2014-11-17 02:01:25
你这里有几件事要做。
首先,您的代码中有一个简单的错误,正如@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;
}发布于 2014-11-17 01:59:05
在您的情况下,问题是程序中有一条路径可能返回未初始化的字符串。如果"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“。
https://stackoverflow.com/questions/26964288
复制相似问题