2009-04-24 2 views
0
나는 다음과 같은 코드를 사용하고

의심의 경우/다른-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"; 
} 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 :
I 두 번째 및 세 번째 if-else 문으로 들어가는 이유는 알 수 없습니다. 누구든지 나를 도울 수 있습니까?

+0

시도를하려고 : foreach 문을 (문자열 항목 in splitTime) {/ * 각 항목에 대한 작업 수행 * /} – Groo

+1

foreach는 문자열을 변경할 수 없으며 배열 인덱스를 사용하여 원래 값을 덮어 써야하기 때문에 여기서는 사용하지 않습니다. – Alnitak

답변

3

첫 번째 if 문이 true이고 따라서 실행되면 else 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]); 
+0

배열을 루프 반복하는 표준은 대안으로 도움이 될 것입니다. –

+0

실제로 그 예가 의도 한 것처럼 행동하는 적절한 방법입니다. – Chii

2

"else if"때문입니다.

당신이 수행하는 코드가있는 경우 : 첫 번째 지점이 있다면

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

그런 다음 두 번째 지점이 실행되지 않을 수 있습니다.

대신이 필요합니다

if (a) { 
} 

if (b) { 
} 

하는 조건이 독립적으로 만들 수 있습니다.

BTW, String.trim()null을 반환 할 수 없으므로 출력에 세 가지 요소 (String.split())가 보장되지 않습니다. 잠재적으로 더 나은 코드는 다음과 같습니다이는 IF-else 절의 기본 동작으로 인해

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(foo) { 
    // A 
} else if(bar) { 
    // B 
} 

foo 경우, A가 실행되며, bar 테스트되지 않습니다. 원하는 의미를 얻으려면 당신의 경우 블록 체인 고려 :

if(foo){ 
    // A 
} 

if(bar) { 
    // B 
} 
0

이는 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'