Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 怀疑if/else if逻辑_Java - Fatal编程技术网

Java 怀疑if/else if逻辑

Java 怀疑if/else if逻辑,java,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[

我正在使用以下代码

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语句。有人能帮我吗?

因为如果第一个if语句为true,因此被执行,那么其余的if就不会被执行。如果要执行其他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]);
这是因为“
else if
”的缘故

如果您有这样的代码:

if (a) {
} else if (b) {
} 
然后,如果第一个分支被删除,则第二个分支永远无法执行

相反,您需要:

if (a) {
}

if (b) {
}
使条件独立

顺便说一句,
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";
    }
}
String sample=“::”;
String[]splitTime=sample.split(“:”);
对于(int i=0;i
这是由于If-Else子句的基本操作造成的:

if(foo) {
  // A
} else if(bar) {
  // B
}
如果
foo
为true,则将执行
A
,并且永远不会测试
bar
。要获得所需的语义,只需链接您的IF块:

if(foo){
  // A
}

if(bar) {
  // B
}
试一试


在嵌套的if-else-if语句中,如果执行一条语句,则不执行其他语句。在您的例子中,第一个if表达式始终为true,因此它将执行,而另外两个则永远不会执行

尝试使用foreach循环解决此问题:foreach(splitTime中的字符串项){/*为每个项执行工作*/}foreach在这里没有用处,因为字符串是不可变的,需要覆盖原始值,使用数组索引。在数组上迭代循环的标准将有助于作为替代方法。事实上,这是实现示例意图的正确方法
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'