'Calling a method to try and rerun through a block of code

I'm trying to compare the cost of a user's phone usage under plans from three different providers. I can get as far as entering the usage details but once entered I try to call the method to rerun from the if statement but it just displays the main menu again and stops. I want it to run through the entire if statement from the start again

import java.util.Scanner;

public class MainMenuSelection {
    
    public static int menuSel() {       
    int menuSel ;       
    System.out.println("ENTER USAGE DETAILS MENU\n");
    System.out.println("Please select an option from the menu:");
    System.out.println("1.Phone Call");
    System.out.println("2.SMS ");
    System.out.println("3.Data usage");
    System.out.println("4. Return to main menu");
    
    
    Scanner in = new Scanner(System.in);    
    System.out.println("Enter selection: ");        
    menuSel = in.nextInt();
    
    while (menuSel < 1 || menuSel >4){
          System.out.println("Value must bebetween 1 and 4, plese try again.");
          System.out.println("Enter your selection: ");
          menuSel = in.nextInt();
        }
    
    return menuSel;
                
}
public static int mainMenuSelection() {

    System.out.println("MAIN MENU\n");
    System.out.println("Please select from the menu:");
    System.out.println("1. Enter Usage details");
    System.out.println("2. Display Cost under provider 1");
    System.out.println("3. Display Cost under provider 2");
    System.out.println("4. Display Cost under provider 3");
    System.out.println("5. Clear usage details");
    System.out.println("6. Exit System");
    
    int mainMenuSelection;
    Scanner userInput = new Scanner(System.in);
    System.out.println("Enter your selection: ");
    mainMenuSelection = userInput.nextInt();
    
    //return mainMenuSelection;
    
    while (mainMenuSelection < 1 || mainMenuSelection >6){
          System.out.println("Value must bebetween 1 and 6, plese try again.");
          System.out.println("Enter your selection: ");
          mainMenuSelection = userInput.nextInt();
        }
            
    System.out.println("You chose selection " + mainMenuSelection + "\n");
    return mainMenuSelection;
    
}

    public static void main(String[] args) {
        System.out.println("Hello World!");

        int callLength = 0;
        int numSMS = 0;
        int numberOfMB = 0;

        int numberofCalls;
        int callTime;
        int totalcallTime = 0;

        int mainMenuSelection = mainMenuSelection();

        if (mainMenuSelection == 1) {

            int menuSel = menuSel();
            if (menuSel == 1) {

                Scanner in = new Scanner(System.in);
                System.out.println("Enter the number of phone call you have made? ");
                numberofCalls = in.nextInt();

                for (int i = 0; i < numberofCalls; i++) {
                    Scanner callInput = new Scanner(System.in);
                    System.out.println("How long was the call in seconds?");
                    callTime = callInput.nextInt();

                    totalcallTime = callTime + totalcallTime;

                }
                System.out.println("Your total number of calls is " + numberofCalls);
                System.out.println("Your total call time is " + totalcallTime + " seconds" + "\n");

            } else if (menuSel == 2) {
                System.out.println("Enter the number of SMS messages: ");
                //int numSMS;
                Scanner userNumSMS = new Scanner(System.in);
                numSMS = userNumSMS.nextInt();

                System.out.println("Your number of SMSs is " + numSMS + "\n");

            } else if (menuSel == 3) {
                System.out.println("Enter the amount of data in MB: ");
                //int numberOfMB;
                Scanner userNumMB = new Scanner(System.in);
                numberOfMB = userNumMB.nextInt();

                System.out.println("Your amount of data in MB is " + numberOfMB + "\n");

            } else {
                mainMenuSelection(); // go back to main menu

            }

        } else if (mainMenuSelection == 2) {
            //Display cost under provider 1

            double callCost = 0.03 * totalcallTime;
            double smsCost = 0.10 * numSMS;
            double dataCost = 0.02 * numberOfMB;
            double totalCostProvider1 = callCost + smsCost + dataCost;

            System.out.println(totalCostProvider1);

        } else if (mainMenuSelection == 3) {
            //Display cost under provider 2
            double callCost2 = 0.04 * totalcallTime;
            double smsCost2 = 0.12 * numSMS;
            double dataCost2 = 0.04 * numberOfMB;
            double totalCostProvider2 = callCost2 + smsCost2 + dataCost2;
            System.out.println(totalCostProvider2);

        } else if (mainMenuSelection == 4) {
            //Display cost under provider 3
            double callCost3 = 0.05 * totalcallTime;
            double smsCost3 = 0.11 * numSMS;
            double dataCost3 = 0.03 * numberOfMB;
            double totalCostProvider3 = callCost3 + smsCost3 + dataCost3;
            System.out.println(totalCostProvider3);

        } else if (mainMenuSelection == 5) {
            //clear usage details 

        } else {
            System.out.println("Exiting System");
            System.exit(0);

        }

        mainMenuSelection = mainMenuSelection();
    }
}


Solution 1:[1]

Codes run from top to bottom. Therefore, after the int mainMenuSelection = mainMenuSelection(); and the if-else statement is run, the code would run once again for the mainMenuSelection = mainMenuSelection() and ends, as there is nothing left in the block.

A fairly simple solution would be using a while or do-while loop with a boolean checking if the user entered the number 6 to exit the system.

You can try this example:

public static void main(String[] args) {  
    /* 
     * Your variables here
     */
    boolean isExit = false;

    while(!isExit) {
        int mainMenuSelection = mainMenuSelection();

        if (mainMenuSelection == 1) {
                // menuSel codes here
        } else if (mainMenuSelection == 2) {
                // Display cost under provider 1
        } else if (mainMenuSelection == 3) {
                // Display cost under provider 2
        } else if (mainMenuSelection == 4) {
                // Display cost under provider 3
        } else if (mainMenuSelection == 5) {
                // Clear usage details
        } else {
            System.out.println("Exiting System");
            isExit = true;
        }

    }

Hopes this answer helps you well.

Solution 2:[2]

It looks like you need a loop. Your main method has an exit condition so you can essentially loop forever by wrapping the code in your main method with a while loop:

public static void main(String[] args) {

  while(true) {
    // your main method code in here
  }
}

Solution 3:[3]

By the way, you need to edit your code above in good formatting.

I have added a while loop in your main. Also, whenever any unwanted number the loop will exit using a break; and that in turn stops the program.

mainMenuSelection = mainMenuSelection(); 

I have deleted the above line from the code so you just need to call it once at the beginning of the code.

Let me know if you need sth else!

import java.util.Scanner;

public class MainMenuSelection {

    public static int menuSel() {
        int menuSel;
        System.out.println("ENTER USAGE DETAILS MENU\n");
        System.out.println("Please select an option from the menu:");
        System.out.println("1.Phone Call");
        System.out.println("2.SMS ");
        System.out.println("3.Data usage");
        System.out.println("4. Return to main menu");

        Scanner in = new Scanner(System.in);
        System.out.println("Enter selection: ");
        menuSel = in.nextInt();

        while (menuSel < 1 || menuSel > 4) {
            System.out.println("Value must bebetween 1 and 4, plese try again.");
            System.out.println("Enter your selection: ");
            menuSel = in.nextInt();
        }

        return menuSel;

    }

    public static int mainMenuSelection() {

        System.out.println("MAIN MENU\n");
        System.out.println("Please select from the menu:");
        System.out.println("1. Enter Usage details");
        System.out.println("2. Display Cost under provider 1");
        System.out.println("3. Display Cost under provider 2");
        System.out.println("4. Display Cost under provider 3");
        System.out.println("5. Clear usage details");
        System.out.println("6. Exit System");

        int mainMenuSelection;
        Scanner userInput = new Scanner(System.in);
        System.out.println("Enter your selection: ");
        mainMenuSelection = userInput.nextInt();

        //return mainMenuSelection;
        while (mainMenuSelection < 1 || mainMenuSelection > 6) {
            System.out.println("Value must bebetween 1 and 6, plese try again.");
            System.out.println("Enter your selection: ");
            mainMenuSelection = userInput.nextInt();
        }

        System.out.println("You chose selection " + mainMenuSelection + "\n");
        return mainMenuSelection;

    }

    public static void main(String[] args) {

        int callLength = 0;
        int numSMS = 0;
        int numberOfMB = 0;

        int numberofCalls;
        int callTime;
        int totalcallTime = 0;

        while (true) {

            int mainMenuSelection = mainMenuSelection();

            if (mainMenuSelection == 1) {

                int menuSel = menuSel();
                if (menuSel == 1) {

                    Scanner in = new Scanner(System.in);
                    System.out.println("Enter the number of phone call you have made? ");
                    numberofCalls = in.nextInt();

                    for (int i = 0; i < numberofCalls; i++) {
                        Scanner callInput = new Scanner(System.in);
                        System.out.println("How long was the call in seconds?");
                        callTime = callInput.nextInt();

                        totalcallTime = callTime + totalcallTime;

                    }
                    System.out.println("Your total number of calls is " + numberofCalls);
                    System.out.println("Your total call time is " + totalcallTime + " seconds" + "\n");

                } else if (menuSel == 2) {
                    System.out.println("Enter the number of SMS messages: ");
                    //int numSMS;
                    Scanner userNumSMS = new Scanner(System.in);
                    numSMS = userNumSMS.nextInt();

                    System.out.println("Your number of SMSs is " + numSMS + "\n");

                } else if (menuSel == 3) {
                    System.out.println("Enter the amount of data in MB: ");
                    //int numberOfMB;
                    Scanner userNumMB = new Scanner(System.in);
                    numberOfMB = userNumMB.nextInt();

                    System.out.println("Your amount of data in MB is " + numberOfMB + "\n");

                }
            } else if (mainMenuSelection == 2) {
                //Display cost under provider 1

                double callCost = 0.03 * totalcallTime;
                double smsCost = 0.10 * numSMS;
                double dataCost = 0.02 * numberOfMB;
                double totalCostProvider1 = callCost + smsCost + dataCost;

                System.out.println(totalCostProvider1);

            } else if (mainMenuSelection == 3) {
                //Display cost under provider 2
                double callCost2 = 0.04 * totalcallTime;
                double smsCost2 = 0.12 * numSMS;
                double dataCost2 = 0.04 * numberOfMB;
                double totalCostProvider2 = callCost2 + smsCost2 + dataCost2;
                System.out.println(totalCostProvider2);

            } else if (mainMenuSelection == 4) {
                //Display cost under provider 3
                double callCost3 = 0.05 * totalcallTime;
                double smsCost3 = 0.11 * numSMS;
                double dataCost3 = 0.03 * numberOfMB;
                double totalCostProvider3 = callCost3 + smsCost3 + dataCost3;
                System.out.println(totalCostProvider3);

            } else if (mainMenuSelection == 5) {
                //clear usage details 

            } else {

                System.out.println("Exiting System");
                System.exit(0);
                break;

            }
        }

    }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 hokwanhung
Solution 2 Hopey One
Solution 3