2014-12-18 2 views
-4

아래 코드 샘플의 출력 "0"을 설명하십시오. 그리고 Java에서 switch case 문에 string을 사용하는 것이 합법적입니까?자바 문자열 및 스위치 케이스

public class Test { 

    static int x; 
    public static void main(String[] args) { 
    String ss = "aBc"; 
    String s = "ABC"; 
    switch(s){ 
    case "" : x++; 
    case "AbC" : x++;break; 
    case "ABC" : x--; 
    default : x++; 

    } 
    System.out.print(x); 
    } 

} 
+0

(Java 8의 경우) –

+2

이 숙제입니까? 이 법률의 여부는 Java 버전에 따라 달라지며 이상한 행동은'break' 문을 놓치지 올 수 있습니다. –

+2

사실 Java7 – Maroun

답변

1

예, 단지 정수를 받아 C는 달리 자바에서 문자열을 사용하는 것이 합법적이다.

s = "ABC"이 있으며 스위치 동작을 구분하기 위해 세 번째 경우에 break을 지정하지 않았기 때문에 세 번째 및 기본 경우를 실행합니다. 따라서 3rd case에서 x의 값은 x--가 x = -1이되고 기본값은 0으로 다시 증가합니다. 따라서 x의 값은 초기 값에서 변경되지 않았습니다.

2

대소 문자 "ABC"다음에 마침표를 넣지 않았으므로 기본값이 실행되었을 가능성이 큽니다. 기본 X = 0, 스위치 문이 라인이 실행되었다 그래서

case "ABC" : x--; 
default : x++; 

, X = 0이면, x = -1 번째 줄 펼쳐진 라인이며, x = 0, 후.

+0

'x'가 만드는 자바 불법 말하지 않았다 아니에요'0에서 1로 이동 x'? 흠. – ajb

2

switch에 두 개의 사례가 있습니다.

switch(s){ 
    case "" : x++; 
    case "AbC" : x++; break; 
    case "ABC" : x--; 
    default : x++; 
} 

당신은 s = "ABC" 때문에 "ABC" 경우에 충돌,하지만 당신은 당신이 전부 switch 문을 떠날 원인이 것이다, 그것에서하지 break을한다. 이 때문에 케이스가 default에 도착했습니다.

"ABC" 다음에 x이 -1로 설정되었지만 default 경우 즉시 0으로 설정됩니다.

자, 저는 의도적으로 잘 될 수도 있으므로 귀하의 break 명세서가 누락되었다고 말할 것입니다. 하지만 그렇지 않은 경우 비정상적인 행동을하는 것을 피할 수 있기 때문에 이것은 그들을 포함시키는 좋은 이유입니다.

0

당신은 break 문을 놓치고 :

// x is initialized to zero 
// s = "ABC" 
switch(s) { 
    case "": // Skipped 
     x++; 
    case "AbC": // Skipped 
     x++; 
     break; 
    case "ABC": // This is executed 
     x--;  // x is now equal to 1, but there's no break statement 
    default:  // Since there's no break statement, this block is also executed 
     x++;  // x is now equal to 1--: 0 
} 
3

휴식 시간을 추가하지 않으면 대소 문자가 모두 부름 (기본값)과 기본값이 모두 호출됩니다.

case "ABC" : x--; 
default : x++; 

은 그래서 x 기본적으로 0에 intialized되어

2

변수 위의 경우를 통해 이동 :

static int x; 

하기 때문에 당신이 도착 그리고

static int x = 0; 

s = "ABC"과 동일 ~ case "ABC"x = -1을 만듭니다. 이 경우 입력 할 경우 break이 없으므로 default으로 계속 입력하여 x++, 즉 -1 + 10을 수행합니다.

0
is it legal to use string in switch case statement in Java ? 

Java 7 스위치 설명문을 소개합니다.그것은 꽤 많은 법적 스위치 문으로 문자열을 사용하는 것입니다.

스위치의 경우 구문 - 3 호선 먼저는 x 값 0으로 변경됩니다 -1 다음 실행 때 스위치 문에서 break 누락 내가 1 호선을 수정 한

switch(expression){ 
    case value : 
     //Statements 
     break; //optional 
    case value : 
     //Statements 
     break; //optional 
    //You can have any number of case statements. 
    default : //Optional 
     //Statements 
} 

은 당신의 코드에서 break 키워드를 추가 4 행을 실행하면 x 값 -1이 0으로 변경되어 결과가 "0"이됩니다.

public class Test { 

    static int x; 
    public static void main(String[] args) { 
    String ss = "aBc"; 
    String s = "ABC"; 
    switch(s){ 
    case "" : x++; break; // Line 1   
    case "AbC" : x++;break; // Line 2 
    case "ABC" : x--;  // Line 3 
    default : x++;   // Line 4 

    } 
    System.out.print(x); 
    }  
}