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());
}
}
嘿,抱歉,这个问题对你们来说一定是个愚蠢的问题,但我已经坚持了一段时间,我使用来自不同 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());
}
}