2009-04-24 4 views
0

Я использую следующий кодСомнение, если/иначе, если логика

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]); 

ВЫВОД:
Внутри Split 0
Значение 1: 0
Значение 2:
Значение 3:
I не знаю, почему он не входит во второе и третье утверждение if-else. Может кто-нибудь мне помочь?

+0

Попробуйте решить эту проблему с помощью Еогеасп-цикл: Еогеасп (String элемент в splitTime) {/ * выполнять работу для каждого элемента * /} – Groo

+1

foreach здесь бесполезно, потому что строки неизменяемы, а исходные значения должны быть перезаписаны с использованием индекса массива. – Alnitak

ответ

3

потому что если первая инструкция if истинна и, таким образом, выполняется, то остальные else ifs не выполняются. Если вы хотите выполнить другие инструкции if-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]); 
+0

Стандартом для циклического цикла по массиву будет помощь в качестве альтернативы. –

+0

Действительно, это правильный способ сделать то, что, по-видимому, – Chii

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"; 
    } 
} 
0

Это связано с фундаментальной работе с If-Else пункта:

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

Если foo правда, A будет выполнять, и bar никогда не будут испытаны. Для того, чтобы получить семантику вы хотите, рассмотреть только выстроив цепочку Если блоки:

if(foo){ 
    // A 
} 

if(bar) { 
    // B 
} 
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' 
Смежные вопросы