所以我正在我的新研究中从事我的第一个程序设计项目。从来没有尝试过编程任何东西。我想使其能够在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();
}
答案 0 :(得分:8)
((Medlem) currentUser).setStatus(newchange);
表示((Medlem) currentUser).getStatus() == newchange
,因此当然只能执行两个分支-两个分支都等于1的分支和两个分支都等于2的分支。
也许您打算在if-else-if -..- else语句后调用setStatus
。
答案 1 :(得分:1)
根据您的代码,在任何情况下(Medlem) currentUser).getStatus()
和newchange
的值都不会不同。这是因为一旦设置了newchange
的值,则在接下来的一行中将相同的值设置为(Medlem) currentUser)
因此,您只看到四种可能性中的两种。
答案 2 :(得分:1)
您正在if
语句上方设置当前用户的状态。这意味着getStatus()
方法始终返回与newchange
相同的结果。
尝试将那行移动到if语句的下方,这样就不会丢失有关先前状态的信息,并且可以在您的条件下使用它。
答案 3 :(得分:1)
只需分配一次旧状态并进行检查:
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");
}
答案 4 :(得分:0)
在这一行代码中:
((Medlem) currentUser).setStatus(newchange);
您正在将currentUser的状态设置为newChange。这意味着status和newChange始终相同,为1或2。
因此,当您检查currentUser的状态并同时检查newChange时,您将只能通过以下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");
}
答案 5 :(得分:0)
您应该尝试简化代码->
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
}
希望有帮助。