如果另有陈述,则有4个结果,但只有2个似乎有效

时间:2018-11-20 13:09:35

标签: java if-statement

所以我正在我的新研究中从事我的第一个程序设计项目。从来没有尝试过编程任何东西。我想使其能够在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();                                                                           

}                                                                                     

6 个答案:

答案 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
        }

希望有帮助。