如果其他语句有4个结果,但只有2个结果似乎有效



所以我在新的研究中进行我的第一个编程项目。以前从未尝试过编程。我想让它能够在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
}

希望能有所帮助。

最新更新