Prashant Shilimkar
Prashant Shilimkar

Reputation: 8830

Unable to get behaviour of Switch case in java

I have written small code in java 6

public class TestSwitch{

public static void main(String... args){
    int a = 1;
    System.out.println("start");
    switch(a){
        case 1:{
            System.out.println(1);
            case 3:
                System.out.println(3);
            case 4:
                System.out.println(4);
        }
        case 2:{
            System.out.println(2);
            case 5:
                System.out.println(5);
            case 7:
                System.out.println(7);
        }
            
    }
    System.out.println("end");
}
}

Output: start 1 2 end

My editor is showing orphaned case for 'case 3' and 'case 5'.Still it is running and showing output.

Upvotes: 1

Views: 357

Answers (8)

Chintan Dhingra
Chintan Dhingra

Reputation: 41

 See if a=1 then your case 1 will work then 1 will pe printed if as we have not using      break after case 1 so all cases are working in flow so output is coming like this if you want to execute only one case at one time then you have to put break after one case like

switch(a){
        case 1:
            System.out.println(1);
             break;
            case 3:
                System.out.println(3);
             break;
            case 4:
                System.out.println(4);
             break;

Then it will break out of the switch case on encountering break statement

Upvotes: 0

Suresh Atta
Suresh Atta

Reputation: 122026

Switch replaces if else's but switch syntax != If else syntax.

You forgot to put break after each case.

So conditions under fall through.

Example:

case 0:
          mColor.setText("#000000");
          break;

You can find that in docs

The break statements are necessary because without them, statements in switch blocks fall through: All statements after the matching case label are executed in sequence, regardless of the expression of subsequent case labels, until a break statement is encountered.

public static void main(String... args){
        int a = 1;
        System.out.println("start");
        switch(a){
            case 1: 
                System.out.println(1);
                break;
            case 2:
                  System.out.println(2);
                  break;
            case 3:
                System.out.println(3);
                break;
            case 4:
                System.out.println(4);
                break;
            case 5:
                System.out.println(5);
                break;
            case 7:
                System.out.println(7);
                break;
            default:
                System.out.println("nothing");

            }

Upvotes: 2

YAMM
YAMM

Reputation: 602

int a = 1;
System.out.println("start");
switch (a) {
case 1: {
    System.out.println(1);
    break;
}
case 3: {
    System.out.println(3);
    break;
}
case 4: {
    System.out.println(4);
    break;
}
case 2: {
    System.out.println(2);
    break;
}
case 5: {
    System.out.println(5);
    //no break will fall through and print 7 too 
}
case 7: {
    System.out.println(7);
    break;
}
default:{
    System.out.println("none");
}

}

Upvotes: 1

Rohan
Rohan

Reputation: 3078

You have not added break statement before case 2.

Refer this to know more about fall through.

Each break statement terminates the enclosing switch statement. Control flow continues
with the first statement following the switch block. The break statements are necessary
because without them, statements in switch blocks fall through: All statements after
the matching case label are executed in sequence, regardless of the expression of
subsequent case labels, until a break statement is encountered.

Upvotes: 1

Rémi Benoit
Rémi Benoit

Reputation: 1346

switch(a){
    case 1:{
        System.out.println(1);
        case 3:

You cannot nest cases like this. Switch should look either like :

    switch(a){
    case 1:
        System.out.println(1);
        break;
    case 3:
       ....

or like this :

switch(a){
    case 1:
        System.out.println(1);
        switch(a) {
            case 3:
                //...
                break;
            case 5 :
                //...

And if you don't add break at the end of a case, the execution will continue after. You should add a break at the end of each cases if they should be executed separately.

Upvotes: 2

Ashish
Ashish

Reputation: 745

As their no break statement in case 1: the execution directly jumps to case 2: and ends up printing "start 1 2 end"..

Upvotes: 1

Chintan Dhingra
Chintan Dhingra

Reputation: 41

Your code will give compilation errors as we can't use curly brace after case : Exact code is:

public static void main(String... args){
        int a = 1;
        System.out.println("start");
        switch(a){
            case 1:
                System.out.println(1);
                case 3:
                    System.out.println(3);
                case 4:
                    System.out.println(4);

            case 2:
                System.out.println(2);
                case 5:
                    System.out.println(5);
                case 7:
                    System.out.println(7);
            }

        System.out.println("end");
    }
    }

and output will be start 1 3 4 2 5 7 end because you have not use "break" after each case.

Upvotes: 1

promanski
promanski

Reputation: 567

You have wrong closing braces before case 2. case 3,4 are interpreted as labels not cases.

Upvotes: 1

Related Questions