Java 关于If-Else的最低使用量

Java 关于If-Else的最低使用量,java,Java,可能重复: 下面的代码过度使用了if-else语句 if (cardType == AARP_CARD_TYPE) { userResponse = messageBox.showMessage("CandidateAARPCardAttachCardToExistingTransaction", null, IMessageBox.YESNO); // MSG:31.59 transaction.setValue(ITransactionHashtableWag.LOY

可能重复:

下面的代码过度使用了if-else语句

 if (cardType == AARP_CARD_TYPE) {
  userResponse = messageBox.showMessage("CandidateAARPCardAttachCardToExistingTransaction",
      null, IMessageBox.YESNO); // MSG:31.59
  transaction.setValue(ITransactionHashtableWag.LOYALTY_MESSAGE_DISPLAYED,
      WalgreensRewardsConstants.ATTACH_CANDIDATE_AARP_CARD);
} else if ((cardType == PSC_CARD_TYPE) && ((!PosHelper.isRunningAsService()))) {
  userResponse = messageBox.showMessage("PendingPSCCardAttachCardToExistingTransaction", null,
      IMessageBox.YESNO); // MSG:31.60
  transaction.setValue(ITransactionHashtableWag.LOYALTY_MESSAGE_DISPLAYED,
      WalgreensRewardsConstants.ATTACH_PENDING_PSC_CARD);

} else if ((cardType == DR_CARD_TYPE) && ((!PosHelper.isRunningAsService()))) {
  userResponse = messageBox.showMessage("PendingDRCardAttachCardToExistingTransaction", null,
      IMessageBox.YESNO); // MSG:31.63
  transaction.setValue(ITransactionHashtableWag.LOYALTY_MESSAGE_DISPLAYED,
      WalgreensRewardsConstants.ATTACH_PENDING_DR_CARD);

} else if ((cardType == WAG_LOYALTY_CARD_TYPE)){
            transaction.setValue(ITransactionHashtableWag.LOYALTY_MESSAGE_DISPLAYED,
              WalgreensRewardsConstants.ATTACH_NOT_ON_FILE);

        if((!PosHelper.isRunningAsService())) {
  userResponse = messageBox.showMessage("CardNotOnFileToAttach", null, IMessageBox.YESNO); // MSG:31.32
  // BUC
  // 1.22.1
}


} else { // If the device is neither of these, POS displays Message 1
  // Button, MSG 31.14. [BUC
  // 1.23.2]
  displayMessage("InvalidLoyaltyCard");
  transaction.setValue(ITransactionHashtableWag.LOYALTY_MESSAGE_DISPLAYED,
      NOT_VALID_LOYALTY_CARD);
  userResponse = -1;
}
我想在下面的表格中删除if-else staement的过度使用

byte cardType ;

    switch (cardType) {
    case  AARP_CARD_TYPE:
         userResponse = messageBox.showMessage("CandidateAARPCardAttachCardToExistingTransaction",
                  null, IMessageBox.YESNO); // MSG:31.59
              transaction.setValue(ITransactionHashtableWag.LOYALTY_MESSAGE_DISPLAYED,
                  WalgreensRewardsConstants.ATTACH_CANDIDATE_AARP_CARD);
                    // blah
        break;

    case PSC_CARD_TYPE:
        if ((!PosHelper.isRunningAsService())
                {

             userResponse = messageBox.showMessage("PendingPSCCardAttachCardToExistingTransaction", null,
                      IMessageBox.YESNO); // MSG:31.60
                  transaction.setValue(ITransactionHashtableWag.LOYALTY_MESSAGE_DISPLAYED,
                      WalgreensRewardsConstants.ATTACH_PENDING_PSC_CARD);
                }   
        // blah
        break;

        case  DR_CARD_TYPE :                
            if ((!PosHelper.isRunningAsService())
                    {                   
                userResponse = messageBox.showMessage("PendingDRCardAttachCardToExistingTransaction", null,
                          IMessageBox.YESNO); // MSG:31.63
                      transaction.setValue(ITransactionHashtableWag.LOYALTY_MESSAGE_DISPLAYED,
                          WalgreensRewardsConstants.ATTACH_PENDING_DR_CARD);
            // blah
            break;


                    case   WAG_LOYALTY_CARD_TYPE :

                        transaction.setValue(ITransactionHashtableWag.LOYALTY_MESSAGE_DISPLAYED,
                                  WalgreensRewardsConstants.ATTACH_NOT_ON_FILE);
                        if((!PosHelper.isRunningAsService())) {
                              userResponse = messageBox.showMessage("CardNotOnFileToAttach", null, IMessageBox.YESNO); // MSG:31.32
                              // BUC
                              // 1.22.1
                            }
                        // blah
                        break;                  


    // ...

    default:
         displayMessage("InvalidLoyaltyCard");
          transaction.setValue(ITransactionHashtableWag.LOYALTY_MESSAGE_DISPLAYED,
              NOT_VALID_LOYALTY_CARD);
          userResponse = -1;
        break;
    }

请告知它是否正确

有效吗?它看起来确实比您修改它的方式干净得多

这两种方法是不同的。在第一种情况下,
如果(cardType==PSC\u CARD\u TYPE&&PosHelper.isruningasservice())
则代码转到默认的else子句,而在第二种情况下,它什么也不做(
break;


ps:难道您没有单元测试来运行以查看它是否按预期工作吗?

而不是if-else语句或开关用例 我更喜欢使用键到代理的映射。 您可以创建一个包含所有代理的hashmap,只需调用正确的代理即可。 看

这将为您提供一个干净的代码


PointersToMethods.get(key.call()

运行代码时,它是否执行了您希望它执行的操作?也就是说,它运行正常,但您只想知道这是否是一种好的编码方法?如果它正常工作,那么它可能是正确的。。!!你应该编辑你以前的问题,要求澄清疑问,而不是发布一个新的问题!这将是一个很好的答案。@assylias..如果你能在我的第二个案例中编写并修改,使它与第一个案例相等,那将是一个很大的帮助one@user1406575我认为这很清楚:在
cardType==PSC\u CARD\u TYPE
PosHelper.isruningasservice()==true
的情况下,您的第一个代码转到else,而第二个代码没有转到默认值。@assylias..请您通过编写完整的代码来纠正我的第二种方法,就像我使用正确的实现所做的那样…这将是一个很大的帮助..谢谢inadvance@user1406575我认为您需要了解有关StackOverflow的一些事情(这是一个友好的评论). 1.2.我已经回答了你之前的问题,即这种方法是混乱的。现在你明白为什么了。3.这是一种很好的做法,我建议您回到上一个问题,看看这是否适用。@user1406575最后,一旦您遵循网站指南,您会发现一些用户非常有知识和帮助。