2015-12-22 3 views
0

Я пытаюсь вызвать метод из другого метода в том же классе, например, когда метод «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(); 

    } 

} 
+0

есть Гото заявление в Java. вы должны быть осторожны, когда используете его. – Shriram

+0

Будьте внимательны, чтобы закрыть корпус x: .. с перерывом; – Abdelhak

+0

Когда метод завершит свою работу, он автоматически вернется к 'mainMenu()', отсюда нет необходимости звонить. –

ответ

0

Вы не должны создавать новый объект при каждом вызове метода. В классе вы можете вызвать любой метод, который вы хотите.

Если вы закончите один метод, вы продолжите его, где вы его назвали. Поэтому, чтобы открыть главное меню, вам придется использовать петлю или что-то подобное.

Самого вызов не более чем:

mainMenu(); 

соответственно

enterValues(); 

без создания нового Conversion.

0

Вы не хотите вызоваmainMenu из enterValues, вы хотите вернуться к нему.

Проведите цикл «навсегда» внутри mainMenu и добавьте условие выхода с помощью break. Таким образом, просто возвращаясь из enterValues или любого другого метода внутри mainMenu приведет вас к печати главное меню и спросить, что еще вы хотите сделать:

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; 
     } 
    } 
} 
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(); 

    } 

} 
+0

Это приведет к переполнению стека: mainMenu() вызывает enterValues ​​(), который снова вызывает mainMenu() ... –

+0

Оба метода ждут ввода пользователя, и я предполагаю, что будущий «случай 6:» должен выйти из приложения , – Berger