【问题标题】:How can I make this if-condition simpler?我怎样才能使这个 if 条件更简单?
【发布时间】:2016-10-14 07:56:03
【问题描述】:

我正在尝试制作一个简单的 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;
}

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

如果此人在测试 1 中至少有 15 分,他将获得课程 1 的认证,并被允许参加课程 1 的考试。

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

最后,只有在两个测试中>= 15 分的情况下,该人才被允许参加考试 2。

这是它目前的样子:http://code2flow.com/Dkf6Vo.png

【问题讨论】:

    标签: algorithm if-statement switch-statement logic


    【解决方案1】:

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

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

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

    当test 2 OK --> 认证OK --> 再次检查test 1是否也OK --> 如果OK,给EXAM 如果不OK,则不要继续。

    如果你想要最短并且直接在变量上条件..你可以在下面尝试

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

    【讨论】:

    • 您也在“仔细检查”。我有两次条件if(test 2 >= 15 points),你有两次条件if(test 1 >= 15 points)。我试图避免它,但我认为这是不可能的。无论如何,您的代码看起来更好,因为您没有两次 certification 2,谢谢 :)
    • 顺便说一句,你所说的“测试 1”是什么意思 = 它是变量还是函数?
    • 测试 1 和测试 2 是变量(所以在现实生活中,这将是一个测试(如预考),该人必须至少获得 15 分,所以if(test_1>=15))。我写了test 1 >= 15 points 以使其更清楚,如果让您感到困惑,请见谅。
    • 没问题..如果它是可变的,可能你需要这种条件 - 请参阅我的更新答案@Rudi
    • 我实际上只需要将其显示为图像,以便其他学生了解他们必须通过哪些测试才能获得认证并参加考试(他们不懂任何编程语言,所以我不会不想用变量显示图像..只是为了“普通人”理解它)
    【解决方案2】:

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

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

    因此,将其分成两个不同的函数可以提高程序的可读性和灵活性。

    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);
    

    【讨论】:

    • 感谢您的解决方案,但我的主要问题/目标不是如何为此解决方案构建良好的(结构化和实际)代码,而是如何在此站点上使用它以获得良好且易于理解的代码图/图,一般人都能看懂:)
    猜你喜欢
    • 2016-09-18
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多