Java 跳过使用 getter 作为表达式的 switch 语句

Java Skipping switch statement using getter as expression

嘿,抱歉,这个问题对你们来说一定是个愚蠢的问题,但我已经坚持了一段时间,我使用来自不同 class 的 getter 作为另一个 class 中的 switch 表达式,我的程序一直跳过整个 switch。

感谢您的宝贵时间!

第一个class


public class InputRequests {
    public int loginRole;


    public void loginChoice(){
        Scanner login = new Scanner(System.in);
        loginRole = login.nextInt();
    }

    public int getLoginRole() {
        return loginRole;
    }
} 

第二个class

public class Menus {

    public void loginChoiceCase() {
        InputRequests inp = new InputRequests();
        switch (inp.getLoginRole()) {
            case 1 -> System.out.println("test");
            case 2 -> System.out.println("tested");
            case 3 -> System.exit(1);
        }
    }
}

主要

public class Main {
    public static void main(String[] args) {
        Printblocks print = new Printblocks();
        InputRequests input = new InputRequests();
        Menus menu = new Menus();
        print.firstMenu();
        input.loginChoice();
        menu.loginChoiceCase();
        System.out.println(input.getLoginRole());
    }
}

第一个菜单打印只是一个品脱块,没有其他任何东西, 当 运行 程序得到我输入的整数时。

您需要删除此行,因为这与您在 main 方法中声明的对象不同

public class Menus {

    public void loginChoiceCase() {
        InputRequests inp = new InputRequests(); <--- delete this line
        switch (inp.getLoginRole()) {
            case 1 -> System.out.println("test");
            case 2 -> System.out.println("tested");
            case 3 -> System.exit(1);
        }
    }
}

解释:为什么会这样?

因为您在 loginChoiceCase 方法中声明的对象没有存储来自用户控制台的值和 loginRole 的默认值(默认为零)并且您没有大小写为零的菜单。

您的程序没有跳过 switch 语句。 查看 Menus.loginChoiceCase() 方法。它正在创建一个新的 InputRequests 实例。这意味着 inp.getLoginRole() 为 null,并且您的 switch 语句没有捕获 null 的默认情况。

向 switch 语句添加 default case

default -> System.out.println("Null");

理想情况下,您想要做的是让您的 loginChoiceCase() 方法接受一个 int,然后在您的 case 语句中使用它。 使用 loginChoiceCase() 能够接受一个 int,然后您可以使用您的 getter。如下所示。

输入请求

public class InputRequests {
public int loginRole;


public void loginChoice(){
    Scanner login = new Scanner(System.in);
    loginRole = login.nextInt();
}

public int getLoginRole() {
    return loginRole;
}
}

菜单

public class Menus {

public void loginChoiceCase(int choice) {
    switch (choice) {
        case 1 : System.out.println("test");
        case 2 : System.out.println("tested");
        case 3 : System.exit(1);
        default : System.out.println("Null");
    }
}
}

主要

public class Main {
public static void main(String[] args) {
    Printblocks print = new Printblocks();
    InputRequests input = new InputRequests();
    Menus menu = new Menus();
    print.firstMenu();
    menu.loginChoiceCase(input.getLoginRole);
    System.out.println(input.getLoginRole());
}
}