Search code examples
javaswitch-statementdo-whilebreak

Java: Switch inside do while loop


I tried to make a multiple random pick ups that would print the message for each input number, i.e. serie of numbers (4 2 17 0) where 0 will stop the code. Got wrong output


public class Main {

   public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       int number=scanner.nextInt();
       
  int x = number;
do{switch(x) {

case 1:
      System.out.println("Language selection");
break;
case 2:
       System.out.println("Customer support");
break;
case 3:
       System.out.println("Check the balance");
break;

case 4:
       System.out.println("Check loan balance");
break;
case 0:
System.out.println("Exit");
break;
  
default:
return;

}
if (x==0)
{break;}
x++;
}

while (true);

   }
} ```
![enter image description here](https://i.sstatic.net/RJBYn.jpg)

![enter image description here](https://i.sstatic.net/wCm4p.jpg)

Solution

  • You can use Scanner#hasNextInt to terminate the loop when integers are exhausted.

    Demo:

    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            while (scanner.hasNextInt()) {
                int x = scanner.nextInt();
                switch (x) {
                case 1:
                    System.out.println("Language selection");
                    break;
                case 2:
                    System.out.println("Customer support");
                    break;
                case 3:
                    System.out.println("Check the balance");
                    break;
                case 4:
                    System.out.println("Check loan balance");
                    break;
                case 0:
                    System.exit(0);
                }
            }
        }
    }
    

    A sample run:

    4 2 17 0
    Check loan balance
    Customer support
    

    Also, note that you need break to avoid the cases falling through inadvertently. I did not see any use of default in this case and therefore, I have removed it from the demo code.

    Alternatively, using a do-while loop:

    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int x = 0;
    
            do {
                x = scanner.nextInt();
                switch (x) {
                case 1:
                    System.out.println("Language selection");
                    break;
                case 2:
                    System.out.println("Customer support");
                    break;
                case 3:
                    System.out.println("Check the balance");
                    break;
                case 4:
                    System.out.println("Check loan balance");
                    break;
                }
            } while (x != 0);
        }
    }