jeno
jeno

Reputation: 21

How do I loop for only specific "case" in switch/case?

I used switch/case to print yearly earnings depending on the bank account the user choose and I want to make this program, whenever the user enters inappropriate input, print "inappropriate input" message and let the user to re-enter the bank account they want to choose. But, currently my code only prints "inappropriate input" message. How can I fix it?

public static void main(String[] args) throws Exception
    {
        //initialize variables
        String bank = "";
        double money;

        //asks the user to type the amount of money
        Scanner myinput = new Scanner (System.in);
        System.out.print("Please enter the amount of money you want in the bank: ");

        //if the input is inappropriate, ensures the user to type the correct input
        while (true) {
            try {
                money = myinput.nextDouble();
                break;
            } catch (Exception e) {
                System.out.println("This is inappropriate. Please enter the amount of money you want in the bank: ");
                myinput.nextLine();
            } 
        }

        //asks user to type the type of account they want
        System.out.println("Please enter the type of account you want: ");
        bank = myinput.next();

        //print yearly earnings depending on the type of account that user chose
        switch (bank) {
        case "A" , "C": //if the user enters A or C, 1.5% of money will be yearly earnings
            System.out.println("You can make $" + (Math.round((0.015 * money)*100)) / 100.0);
            break;
        case "B": //if the user enters A or C, 2% of money will be yearly earnings
            System.out.println("You can make $" + (Math.round((0.02 * money)*100)) / 100.0);
            break;
        case "X": //if the user enters A or C, 5% of money will be yearly earnings
            System.out.println("You can make $" + (Math.round((0.05 * money)*100)) / 100.0);
            break; 
        default:
            System.out.println ("This is inappropriate input. Please enter the type of account you want");
            bank = myinput.nextLine();
        } 

    //closing scanner
    myinput.close();

}//end main

Upvotes: 1

Views: 77

Answers (2)

pauan
pauan

Reputation: 49

package com.javatutorial;

import java.util.Scanner;

class Main{
    public static void main(String[] args) throws Exception
    {
        String bank = "";
        double money = 0;
        boolean valid = false;

        Scanner myinput = new Scanner (System.in);
        System.out.print("Please enter the amount of money you want in the bank: ");

        while (true) {
            try {
                money = myinput.nextDouble();
                break;
            } catch (Exception e) {
                System.out.println("This is inappropriate. Please enter the amount of money you want in the bank: ");
                myinput.next();
            }

        }

   do {
       System.out.println("Please enter the type of account you want: ");
       bank = myinput.next();
        switch (bank) {

            case "A":
            case "C":
                System.out.println("You can make $" + (Math.round((0.015 * money) * 100)) / 100.0);
                valid = true;
                break;
            case "B":
                System.out.println("You can make $" + (Math.round((0.02 * money) * 100)) / 100.0);
                valid = true;
                break;
            case "X":
                System.out.println("You can make $" + (Math.round((0.05 * money) * 100)) / 100.0);
                valid = true;
                break;
            default:
                System.out.println("This is inappropriate input. Please enter the type of account you want");
        }
    }while( !valid);

    }
}

Upvotes: 1

Sither Tsering
Sither Tsering

Reputation: 1308

You can have one boolean variable for getting out of while-loop. Flag is set to false in switch/case because while(false) wont iterate further.

boolean flag = true;
while(flag){
    switch(bank){
        case "A","C":
            System.out.println("You can make $" + (Math.round((0.015 * money)*100)) / 100.0);
            flag = false; //put this in all case.
            break;
        ...
    }
}

Upvotes: 2

Related Questions