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'