如何在方法内部制作方法并捕获java中方法上方的函数名称


import java.util.Scanner;
public class allPurpose {
    public static void main(String[] args) {
        theMain();
    }
    public static void theMain() {
        System.out.println("Welcome to All purpose java Programme n Please select from the following:");
        Scanner sc = new Scanner(System.in);
        System.out.println("========MENU=========");
        System.out.println("1. Addition");
        System.out.println("2. Subtraction");
        System.out.println("3. Multiplication");
        System.out.println("4. Division");
        System.out.println("5. Table");
        System.out.println("6. Square and Cube");
        System.out.println("7. Exit");
        int n = sc.nextInt();
        switch (n) {
            case 1:
                addition();
                break;
            case 2:
                subtraction();
                break;
            case 3:
                multiplication();
                break;
            case 4:
                division();
                break;
            case 5:
                table();
                break;
            case 6:
                squareAndCube();
                break;
            case 7:
                exit();
                break;
            default:
                System.out.println("Invalid input");
                break;
        }

    }
    public static void addition() {
        Scanner sc = new Scanner(System.in);
        System.out.println("nSelected Additionn");
        System.out.print("Enter one Number t");
        int a = sc.nextInt();
        System.out.print("Enter another Numbert");
        int b = sc.nextInt();
        int c = (a + b);
        System.out.println("n t Addition: " + c);
        System.out.println("n!continue");
        System.out.println("1. Addition");
        System.out.println("2. Main Menu");
        System.out.println("3. Exit");
        System.out.print("Select one option t");
        int n = sc.nextInt();
        switch (n) {
            case 1:
                addition();
                break;
            case 2:
                theMain();
                break;
            case 3:
                exit();
                break;
            default:
                System.out.println("Invalid input");
                break;
        }

    }
    public static void subtraction() {
        Scanner sc = new Scanner(System.in);
        System.out.println("nSelected Subtractionn");
        System.out.print("Enter one Number t");
        int a = sc.nextInt();
        System.out.print("Enter another Numbert");
        int b = sc.nextInt();
        int c = (a - b);
        System.out.println("n t Subtraction: " + c);
        System.out.println("n!continue");
        System.out.println("1. Subtraction");
        System.out.println("2. Main Menu");
        System.out.println("3. Exit");
        System.out.print("Select one option t");
        int n = sc.nextInt();
        switch (n) {
            case 1:
                subtraction();
                break;
            case 2:
                theMain();
                break;
            case 3:
                exit();
                break;
            default:
                System.out.println("Invalid input");
                break;
        }

    }
    public static void multiplication() {
        Scanner sc = new Scanner(System.in);
        System.out.println("nSelected Multiplicationn");
        System.out.print("Enter one Number t");
        int a = sc.nextInt();
        System.out.print("Enter another Numbert");
        int b = sc.nextInt();
        int c = (a * b);
        System.out.println("n t Multiplication: " + c);
        System.out.println("n!continue");
        System.out.println("1. Multiplication");
        System.out.println("2. Main Menu");
        System.out.println("3. Exit");
        System.out.print("Select one option t");
        int n = sc.nextInt();
        switch (n) {
            case 1:
                multiplication();
                break;
            case 2:
                theMain();
                break;
            case 3:
                exit();
                break;
            default:
                System.out.println("Invalid input");
                break;
        }
    }
    public static void division() {
        Scanner sc = new Scanner(System.in);
        System.out.println("nSelected Divisionn");
        System.out.print("Enter one Number t");
        int a = sc.nextInt();
        System.out.print("Enter another Numbert");
        int b = sc.nextInt();
        int c = (a / b);
        System.out.println("n t Division: " + c);
        System.out.println("n!continue");
        System.out.println("1. Division");
        System.out.println("2. Main Menu");
        System.out.println("3. Exit");
        System.out.print("Select one option t");
        int n = sc.nextInt();
        switch (n) {
            case 1:
                division();
                break;
            case 2:
                theMain();
                break;
            case 3:
                exit();
                break;
            default:
                System.out.println("Invalid input");
                break;
        }
    }
    public static void table() {
        Scanner sc = new Scanner(System.in);
        System.out.println("nSelected Tablen");
        System.out.print("Enter Number to get Table of it  t");
        int a = sc.nextInt();
        for (int i = 1; i<=10; i++){
            int b = a*i;
            System.out.println(a + " * " + (i) + " = " +b);
        }
        System.out.println("n!continue");
        System.out.println("1. Table");
        System.out.println("2. Main Menu");
        System.out.println("3. Exit");
        System.out.print("Select one option t");
        int n = sc.nextInt();
        switch (n) {
            case 1:
               table();
                break;
            case 2:
                theMain();
                break;
            case 3:
                exit();
                break;
            default:
                System.out.println("Invalid input");
                break;
        }
    }
    public static void squareAndCube() {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter one number to check its Square and Cube t ");
        int a = sc.nextInt();
        int s = (a * a);
        int c = (a * a * a);
        System.out.println("t Square: " + s + "n tCube: " + c);
        System.out.println("n!continue");
        System.out.println("1. Square and Cube");
        System.out.println("2. Main Menu");
        System.out.println("3. Exit");
        System.out.print("Select one option t");
        int n = sc.nextInt();
        switch (n) {
            case 1:
                squareAndCube();
                break;
            case 2:
                theMain();
                break;
            case 3:
                exit();
                break;
            default:
                System.out.println("Invalid input");
                break;
        }
    }
    public static void exit() {
        System.out.println("n tThank you have a nice day ahead! :)");
    }
    }

我正在用Java制作具有许多功能的计算器我们可以看到我在每个方法上都添加了以下代码

    System.out.println("n!continue");
    System.out.println("1. Addition");
    System.out.println("2. Main Menu");
    System.out.println("3. Exit");
    System.out.print("Select one option t");
    int n = sc.nextInt();
    switch (n) {
        case 1:
            addition();
            break;
        case 2:
            theMain();
            break;
        case 3:
            exit();
            break;
        default:
            System.out.println("Invalid input");
            break;
}

只是区别在于每个方法的第二行都不同,在上面的示例代码中

System.out.println("1. Addition");
在上面的例子中,它

根据方法名称进行添加(在加法方法中,它使用了这样(在减法中是减法等等

因此,我们可以制作一种方法来保留上述所有代码,并且在该代码中,我们还根据我们使用的方法自动捕获第二行就像在它的第二行划分中一样,它将System.out.println("1.司"(;根据方法自动捕获

首先

System.out.println 不是方法唯一不同的地方,而且(更重要的是(case 1每个方法递归调用自身的switch构造。其次,你的设计存在问题,其解决方案也将解决原始问题。请注意,从每个方法调用另一个方法,即使在用户请求返回主菜单的情况下也是如此。堆栈越来越大!因此,让我们首先重写theMain方法:

public static void theMain() {
    System.out.println("Welcome to All purpose java Programme n Please select from the following:");
    Scanner sc = new Scanner(System.in);
    int n = 0;
    while (n != 7) {
        System.out.println("========MENU=========");
        System.out.println("1. Addition");
        System.out.println("2. Subtraction");
        System.out.println("3. Multiplication");
        System.out.println("4. Division");
        System.out.println("5. Table");
        System.out.println("6. Square and Cube");
        System.out.println("7. Exit");
        n = sc.nextInt();
        switch (n) {
            case 1:
               addition();
               break;
            case 2:
               subtraction();
               break;
            case 3:
                multiplication();
                break;
            case 4:
                division();
                break;
            case 5:
                table();
                break;
            case 6:
                squareAndCube();
                break;
            case 7:
                exit();
                break;
            default:
                System.out.println("Invalid input");
                break;
        }
    }
}

如您所见,我们处于循环中,如果用户想要离开程序,则会中断。

现在让我们重写其中一个方法:

public static void addition() {
    while (true) {
        Scanner sc = new Scanner(System.in);
        System.out.println("nSelected Additionn");
        System.out.print("Enter one Number t");
        int a = sc.nextInt();
        System.out.print("Enter another Numbert");
        int b = sc.nextInt();
        int c = (a + b);        
        System.out.println("n t Addition: " + c);
        if (!proceed("Addition"))
            break;
    }
}

最后,proceed方法的代码:

public static bool proceed(String method) {
    System.out.println("n!continue");
    System.out.println("1. " + method);
    System.out.println("2. Main Menu");
    System.out.print("Select one option t");
    int n = sc.nextInt();
    switch (n) {
        case 1:
            return true;
        case 2:
             return false;
        default:
            System.out.println("Invalid input");
            break;
    }
}

请注意,现在只能从主菜单exit

回答您的问题 - 方法名称可以通过反射检索,但我相信这对于这个简单的程序来说是矫枉过正。

考虑使用接口来制作更通用的方法;例如,加法/减法/乘法和除法可以建模为一种方法,如下所示:

    int n = sc.nextInt();
    switch (n) {
    case 1:
        doCalculator("Addition", (a,b) -> a+b);
        break;
    case 2:
        doCalculator("Subtraction", (a,b) -> a-b);
        break;
    case 3:
        doCalculator("Multiplication", (a,b) -> a*b);
        break;
    case 4:
        doCalculator("Division", (a,b) -> a/b);
        break;

接受两个输入并输出一个值的通用计算器:

    public static void doCalculator(String title, Calculator calc) {
    Scanner sc = new Scanner(System.in);
    System.out.println("nSelected "+title+"n");
    System.out.print("Enter one Number t");
    int a = sc.nextInt();
    System.out.print("Enter another Numbert");
    int b = sc.nextInt();
    int c = calc.calculate(a, b);
    System.out.println("n t "+title+": " + c);
    System.out.println("n!continue");
    System.out.println("1. "+title);
    System.out.println("2. Main Menu");
    System.out.println("3. Exit");
    System.out.print("Select one option t");
    int n = sc.nextInt();
    switch (n) {
    case 1:
        doCalculator(title, calc);
        break;
    case 2:
        theMain();
        break;
    case 3:
        exit();
        break;
    default:
        System.out.println("Invalid input");
        break;
    }
    sc.close();
}

关键是使用对计算进行建模的接口:

interface Calculator {
    int calculate(int a, int b);
}

您可以创建其他接口来密切模拟其他类型的计算,以扩展此方法的灵活性。

如果添加一个简单的接口,则可以避免使用反射:

public class allPurpose {
    //All current methods here
    interface Action{
        void doOption();
    }
}

然后,只需索引到您的方法数组中即可。

theMain()中,您可以执行以下操作:

public static void theMain() {
    //Other code here
    //instead of switch statement do:
    Action[] initialOptions = new Action[] {
        new Action() { public void doOption() { addition(); } },
        new Action() { public void doOption() { subtraction(); } },
        new Action() { public void doOption() { multiplication(); } },
        new Action() { public void doOption() { division(); } },
        new Action() { public void doOption() { table(); } },
        new Action() { public void doOption() { squareAndCube(); } },
        new Action() { public void doOption() { exit(); } },
    };
    int n = sc.nextInt();
    if(n < 1 || > 7)
        System.out.println("Invalid input");
    else
        actions[n-1].doOption();
}

在其他方法中使用帮助程序方法,其中 repeat 是当前方法:

public static void continueOptions(int i, Action repeat){
    Action[] options = new Action[] {
        repeat,
        new Action() { public void doOption() { theMain(); } },
        new Action() { public void doOption() { exit(); } },
    };
    if(i < 1 || > 3)
        System.out.println("Invalid input");
    else
        options[i-1].doOption();
}

在此之后,例如addition看起来像:

public static void addition() {
    Scanner sc = new Scanner(System.in);
    System.out.println("nSelected Additionn");
    System.out.print("Enter one Number t");
    int a = sc.nextInt();
    System.out.print("Enter another Numbert");
    int b = sc.nextInt();
    int c = (a + b);
    System.out.println("n t Addition: " + c);
    System.out.println("n!continue");
    System.out.println("1. Addition");
    System.out.println("2. Main Menu");
    System.out.println("3. Exit");
    System.out.print("Select one option t");
    int n = sc.nextInt();
    continueOptions(int i, new Action() { public void doOption() { addition(); } });
}
<</div> div class="one_answers">

您可以将参数传递给方法并在该方法中使用 switch case:

public static void callthismethod(int number){
    System.out.println("n!continue");
    switch (number) {
        case 1 : System.out.println("1. Addition");break;
        case 2 : System.out.println("1. Subtraction");break;
        case 3 : System.out.println("1. Multiplication");break;
        ..............
        ..............
        ..............
    }
    System.out.println("2. Main Menu");
    System.out.println("3. Exit");
    System.out.print("Select one option t");
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    switch (n) {
        case 1:
            if(number == 1){
                addition();
            }
            else if(number == 2){
                subtraction();
            }
            else if(number == 3){
                multiplication();
            }
            ...........
            ...........
            ...........
            break;
        case 2:
            theMain();
            break;
        case 3:
            exit();
            break;
        default:
            System.out.println("Invalid input");
            break;
    }
}

最新更新