怀疑if / else-if逻辑

时间:2009-04-24 11:55:06

标签: java

我正在使用以下代码

String sample = " : : ";
String[] splitTime = sample.split(":");
if ( splitTime[0].trim().equals("") ||
        splitTime[0].trim().equals(null)) {
      System.out.println("Inside Split 0");
      splitTime[0] = "0";
 } else if (splitTime[1].trim().equals("") ||
        splitTime[1].trim().equals(null)) {
      System.out.println("Inside Split 1");
      splitTime[1] = "0";
 }else if (splitTime[2].trim().equals("") ||
        splitTime[2].trim().equals(null)) {
      System.out.println("Inside Split2");
      splitTime[2] = "0";
 }

 System.out.println("Value 1 :"+splitTime[0]);
 System.out.println("Value 2 :"+splitTime[1]);
 System.out.println("Value 3 :"+splitTime[2]);

输出:
内部分裂0
值1:0
价值2:
价值3:
我不知道为什么它不会进入第二和第三if-else声明。任何人都可以帮助我吗?

5 个答案:

答案 0 :(得分:3)

因为如果第一个if语句为true,因此执行,那么其余的ifs不会被执行。如果要执行其他else-if语句,为什么不将它们重写为单独的if语句?

String sample = "::";
String[] splitTime = sample.split(":");
if ( splitTime[0].trim().equals("") ||
        splitTime[0].trim().equals(null)) {
      System.out.println("Inside Split 0");
      splitTime[0] = "0";
 }
 if (splitTime[1].trim().equals("") ||
        splitTime[1].trim().equals(null)) {
      System.out.println("Inside Split 1");
      splitTime[1] = "0";
 } 
 if (splitTime[2].trim().equals("") ||
        splitTime[2].trim().equals(null)) {
      System.out.println("Inside Split2");
      splitTime[2] = "0";
 }

 System.out.println("Value 1 :"+splitTime[0]);
 System.out.println("Value 2 :"+splitTime[1]);
 System.out.println("Value 3 :"+splitTime[2]);

答案 1 :(得分:2)

这是因为“else if”。

如果你的代码有:

if (a) {
} else if (b) {
} 

如果第一个分支是。

,则永远不会执行第二个分支

相反,你需要:

if (a) {
}

if (b) {
}

使条件独立。

BTW,String.trim()无法返回null,并且您无法保证在String.split()的输出中获得三个元素。可能更好的代码是:

String sample = " : : ";
String[] splitTime = sample.split(":");
for (int i = 0; i < splitTime.length; ++i) {
    splitTime[i] = splitTime[i].trim();
    if (splitTime[i].length() == 0) {
        splitTime[i] = "0";
    }
}

答案 2 :(得分:0)

这是由于If-Else子句的基本操作:

if(foo) {
  // A
} else if(bar) {
  // B
}

如果foo为真,则A将会执行,bar将永远不会被测试。要获得所需的语义,请考虑将if块链接起来:

if(foo){
  // A
}

if(bar) {
  // B
}

答案 3 :(得分:0)

String sample = " 12 : 59 : 60 ";
// strip spaces and create up to 3 parts
String[] splitTime = sample.trim().split(" *: *", 3);
for (int i = 0; i < splitTime.length; i++)
    System.out.println("Inside " + i + " '" + splitTime[i] + '\'');

打印

Inside 0 '12'
Inside 1 '59'
Inside 2 '60'

答案 4 :(得分:0)

在嵌套的if-if语句中,如果执行了一个语句,则不执行其他语句。在您的情况下,第一个if表达式始终为true,因此它会执行,因此其他两个永远不会执行。