为什么“else”分支与其中一个“if”分支一起执行?

时间:2014-04-25 16:29:11

标签: java if-statement

我有一个问题,并且知道wat会这样做。这是函数的代码段。

if(rClass.equals("SavingsAccount")) {
    account = new SavingsAccount(rId,rName,start, end);
}
if(rClass.equals("DraftAccount")) {
    account = new DraftAccount(rId,rName,start, end);
}
if(rClass.equals("VIPAccount")) {
    account = new VIPAccount(rId,rName,start, end);
}
else {
    account = null;
}

从文件中读取变量String rClass,它是100%" SavingsAccount"但它会跳过所有的行,最后我有account = null,为什么? 甚至试图把它放在if的后面:

String rClass = "SavingsAccount";

结果是一样的。

4 个答案:

答案 0 :(得分:8)

请注意,您使用了2个if语句和if-else

//first if statement
if(rClass.equals("SavingsAccount")) {
    account = new SavingsAccount(rId,rName,start, end);
}

//second if statement
if(rClass.equals("DraftAccount")) {
    account = new DraftAccount(rId,rName,start, end);
}

//And an if-else
if(rClass.equals("VIPAccount")) {
    account = new VIPAccount(rId,rName,start, end);
}
else {
    account = null;
}

因此,您将帐户设置为account = new SavingsAccount(rId,rName,start, end);,然后将其设置为null。

你想要一个else-if

if(rClass.equals("SavingsAccount")) {
    account = new SavingsAccount(rId,rName,start, end);
}else if(rClass.equals("DraftAccount")) {
    account = new DraftAccount(rId,rName,start, end);
}else if(rClass.equals("VIPAccount")) {
    account = new VIPAccount(rId,rName,start, end);
}else {
    account = null;
}

答案 1 :(得分:3)

这样做:

if(rClass.equals("SavingsAccount")) {
    account = new SavingsAccount(rId,rName,start, end);
}
else if(rClass.equals("DraftAccount")) {
    account = new DraftAccount(rId,rName,start, end);
}
else if(rClass.equals("VIPAccount")) {
    account = new VIPAccount(rId,rName,start, end);
}
else {
    account = null;
}

或者更好地使用 switch语句

switch(rClass) {
  case "SavingsAccount":
    account = new SavingsAccount(rId, rName, start, end);
    break;
  case "DraftAccount":
    account = new DraftAccount(rId, rName, start, end);
    break;
  case "VIPAccount":
    account = new VIPAccount(rId, rName, start, end);
    break;
  default:
    account = null;
}

答案 2 :(得分:3)

你有一个逻辑问题。

基本上你说的是:

如果这是储蓄账户,请执行此操作

如果这是草稿帐户,请执行此操作

如果这是VIP帐户,或者如果它不是VIP帐户,请将其设置为NULL

您需要将第二个和第三个if语句更改为else if语句

答案 3 :(得分:3)

你必须改变你的代码:

if(rClass.equals("SavingsAccount")) {
    account = new SavingsAccount(rId,rName,start, end);
}
else if(rClass.equals("DraftAccount")) {
    account = new DraftAccount(rId,rName,start, end);
}
else if(rClass.equals("VIPAccount")) {
    account = new VIPAccount(rId,rName,start, end);
}
else {
    account = null;
}

因为在您的情况下,您首先正确地分配了新的SavingsAccount,但是无论如何都会达到阻止,并且它会使您的引用无效。