如何使这个if条件更简单?

时间:2016-10-14 07:56:03

标签: algorithm if-statement switch-statement logic

我正试图制作一个简单的if条件。不幸的是,我有两次相同的条件(我想避免它)。

我正在此网站上建立一个流程:http://code2flow.com/#

代码如下所示:

Prerequisite for certification and exam;
if(test 1 >= 15 points)
{
  certification 1;
  exam 1;
  if(test 2 >= 15 point)
  {
    certification 2;
    exam 1 + 2;
  }
}
else if(test 2 >= 15 point)
{
  certification 2;
}

解释:一个人必须在课程中通过考试(有2门课程)。他必须获得至少15分才能获得该课程的认证。

如果该人在考试1中至少获得15分,他将获得课程1的证书,并被允许为课程1编写考试。

如果该人在测试2中至少获得15分,他将获得课程2的认证。

最后,只有在两次测试> = 15分的情况下,才允许此人编写考试2。

以下是目前状态的图片:http://code2flow.com/Dkf6Vo.png

2 个答案:

答案 0 :(得分:2)

我不明白为什么你需要仔细检查。 你可以用它。

 if (test 1 >= 15) {
    certification 1;
    exam 1;
}

if (test 2 >= 15) {
    certification 2;
    if (test 1>=15) {
        exam 1 + 2;
    }
}
  

当测试1 OK - >考试和认证确定。

     

当测试2 OK - >认证OK - >再次检查测试1是否也正常 - >如果可以,请提供考试   如果不行,那就不要继续了。

如果你想在变量上直接使用short和condition ..你可以尝试下面的

exam = test2 >= 15 && test1 >=15 ? 2 : (test1 >= 15 ? 1 : 0) ;

certification = test2 > = 15 ? 2 : (test1 >= 15 ? 1 : 0);

答案 1 :(得分:1)

在编写代码时,我们最关心的是管理复杂性和可读性。如果不应将其视为主要标准,则减少一两个。问题应该是,我们应该如何设计这两个逻辑。

混合这些认证逻辑和考试逻辑并不是良好设计的标志。

因此,分为两个不同的功能,以提高可读性并增加程序的灵活性。

int getCertificate(int point){
    if(point >= 15)
       return 1;
    return 0;
}

int certificate = getCertificate(exam1) + getCertificate(exam2);

int getExams(int exam1, int exam2){
    if(exam1 >= 15){
       if(exam2 >=15)
          return 2;
       return 1;
    }
    return 0;
}

int exam = getExams(exam1, exam2);