从同一个类中的其他方法调用方法

时间:2015-12-22 13:23:04

标签: java

我试图从同一个类中的另一个方法调用一个方法,例如当" enterValues"方法完成后,我希望它回到主菜单。有人可以解释我怎么做到这一点?我对这里对象的使用也有点困惑,我是否正确地认为我需要像我在这里所做的那样在每个方法中创建一个对象,以便调用其他方法?

    import java.util.Scanner;
public class Conversion {

    int value;

    public void mainMenu() {
        int menuChoice;

        Scanner menuScan = new Scanner(System.in);

        Conversion mainMenu = new Conversion();

        System.out.println("1. Enter values and type -1 to stop");
        System.out.println("2. Euros");
        System.out.println("3. Dollars");
        System.out.println("4. Yen");
        System.out.println("5. Rupees");
        System.out.println("6. Exit");


        while (!menuScan.hasNextInt() || (menuChoice = menuScan.nextInt()) > 6) {
            menuScan.nextLine();
            System.err.println("Please enter a valid menu option 1 - 6: "); 
        }


        switch (menuChoice) {
        case 1:

            mainMenu.enterValues();

        case 2:

        }


    }

    public void enterValues() {

        Conversion enterValues = new Conversion();

        Scanner valueScan = new Scanner(System.in);
        System.out.print("Enter value to convert: ");
        value = valueScan.nextInt();
        System.out.println("Value entered. Returning to main menu.");

        valueScan.close();

        enterValues.mainMenu();
    }

    public static void main(String[] args) {


        Conversion main = new Conversion();

        main.mainMenu();

    }

}

3 个答案:

答案 0 :(得分:1)

当您进入非静态方法时,您已经处于类的实例中,因此无需创建其他实例。

此外,当您在班级的实例中时,您只需直接调用其他方法,例如mainMenu();

我修改了你的代码以反映这一点:

import java.util.Scanner;
public class Conversion {

    int value;

    public void mainMenu() {
        int menuChoice;

        Scanner menuScan = new Scanner(System.in);

        System.out.println("1. Enter values and type -1 to stop");
        System.out.println("2. Euros");
        System.out.println("3. Dollars");
        System.out.println("4. Yen");
        System.out.println("5. Rupees");
        System.out.println("6. Exit");


        while (!menuScan.hasNextInt() || (menuChoice = menuScan.nextInt()) > 6) {
            menuScan.nextLine();
            System.err.println("Please enter a valid menu option 1 - 6: "); 
        }


        switch (menuChoice) {
        case 1:

            enterValues();

        case 2:

        }


    }

    public void enterValues() {


        Scanner valueScan = new Scanner(System.in);
        System.out.print("Enter value to convert: ");
        value = valueScan.nextInt();
        System.out.println("Value entered. Returning to main menu.");

        valueScan.close();

        mainMenu();
    }

    public static void main(String[] args) {


        Conversion main = new Conversion();

        main.mainMenu();

    }

}

答案 1 :(得分:0)

每次调用方法时都不能创建新对象。在课堂上,你可以调用你想要的任何方法。

如果您完成了一种方法,则可以继续调用它。因此,为了保持主菜单打开,您将不得不使用循环或类似的东西。

电话本身只不过是:

mainMenu();
分别

enterValues();

没有创建新的Conversion

答案 2 :(得分:0)

您不希望从mainMenu 致电 enterValues,您希望返回

mainMenu内创建一个“永久”循环,并添加一个带有break的退出条件。这样只需从enterValuesmainMenu内的任何其他方法返回,就会返回打印主菜单并询问您还想做什么:

public void mainMenu() {
    mainLoop: while (true) {
        int menuChoice;

        Scanner menuScan = new Scanner(System.in);

        Conversion mainMenu = new Conversion();

        System.out.println("1. Enter values and type -1 to stop");
        System.out.println("2. Euros");
        System.out.println("3. Dollars");
        System.out.println("4. Yen");
        System.out.println("5. Rupees");
        System.out.println("6. Exit");

        while (!menuScan.hasNextInt() || (menuChoice = menuScan.nextInt()) > 6) {
            menuScan.nextLine();
            System.err.println("Please enter a valid menu option 1 - 6: "); 
        }

        switch (menuChoice) {
        case 1:
            mainMenu.enterValues();
            break;
        case 2:
            break;
        case 6:
            break mainLoop;
        }
    }
}