所以我在新的研究中进行我的第一个编程项目。以前从未尝试过编程。我想让它能够在4个不同的结果和一个默认函数之间进行选择,但它似乎只能在if语句和第二个else if语句之间进行选择。我做错了什么?
private void userStandby () {
System.out.println("What do you want to set your membershipstatus to");
System.out.println("1) Active n2) Standby");
int newchange = input.nextInt();
((Medlem) currentUser).setStatus(newchange);
if (((Medlem) currentUser).getStatus() == 1 && newchange == 1) {
System.out.println("Your membership is already active");
} else if (((Medlem) currentUser).getStatus() == 1 && newchange == 2) {
System.out.println("Your membership is now on standby");
} else if (((Medlem) currentUser).getStatus() == 2 && newchange == 2) {
System.out.println("Your membership is already on standby");
} else if (((Medlem) currentUser).getStatus() == 2 && newchange == 1) {
System.out.println("Your membership is now active");
} else
System.out.println("Please write 1 or 2");
userStandby();
}
((Medlem) currentUser).setStatus(newchange);
意味着((Medlem) currentUser).getStatus() == newchange
,所以当然只有两个分支可以执行——一个是它们都等于1的分支,另一个是两者都等于2的分支。
也许你的意图是在if-else-if-之后打电话给setStatus
-else语句。
根据您的代码,不存在(Medlem) currentUser).getStatus()
和newchange
的值不同的情况。这是因为一旦设置了newchange
的值,在下一行中,您将为(Medlem) currentUser)
设置相同的值
因此,你只能看到四种可能性中的两种。
您正在if
语句上方设置当前用户的状态。这意味着getStatus()
方法总是返回与newchange
相同的结果。
尝试将这一行移到if语句下方,这样就不会丢失有关先前状态的信息,并且可以在您的条件下使用。
只需分配一次旧状态并进行检查:
int oldChange = ((Medlem) currentUser).getStatus();
((Medlem) currentUser).setStatus(newchange);
if (oldChange == 1 && newchange == 1) {
System.out.println("Your membership is already active");
} else if (oldChange == 1 && newchange == 2) {
System.out.println("Your membership is now on standby");
} else if (oldChange == 2 && newchange == 2) {
System.out.println("Your membership is already on standby");
} else if (oldChange == 2 && newchange == 1) {
System.out.println("Your membership is now active");
} else {
System.out.println("Please write 1 or 2");
}
在这行代码中:
((Medlem) currentUser).setStatus(newchange);
您正在将currentUser的状态设置为newChange。这意味着状态和newChange总是相同的,要么是1,要么是2。
因此,当你在检查newChange的同时检查currentUser的状态时,你只能通过这些if语句:
if (((Medlem) currentUser).getStatus() == 1 && newchange == 1) {
System.out.println("Your membership is already active");
}
else if (((Medlem) currentUser).getStatus() == 2 && newchange == 2) {
System.out.println("Your membership is already on standby");
}
您应该尝试简化代码-->
int newchange = input.nextInt();
// you don't need to call this method every time you want to check something
int currUserStatus = ((Medlem) currentUser).setStatus(newchange);
//Check currUserStatus 1
if (currUserStatus == 1) {
// check change
if (newchange == 1) {
// code
} else if (newchange == 2) {
//code
}
// check currUserStatus 2
} else if (currUserStatus == 2) {
// check change
if (newchange == 1) {
// code
} else if (newchange == 2) {
//code
}
希望能有所帮助。