Как я могу упростить это условие if?

#algorithm #if-statement #switch-statement #logic

#алгоритм #оператор if #оператор переключения #Логические

Вопрос:

Я пытаюсь создать простое условие 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 баллов, чтобы получить сертификат по курсу.

Если человек набрал не менее 15 баллов за тест 1, он получает сертификат за курс 1 и может написать экзамен за курс 1.

Если человек набрал не менее 15 баллов за тест 2, он получает сертификат за курс 2.

Наконец, человеку разрешается писать экзамен 2, только если он набрал в обоих тестах> = 15 баллов.

Вот изображение того, как это выглядит в настоящее время: http://code2flow.com/Dkf6Vo.png

Ответ №1:

Я не понимаю, зачем вам нужно перепроверять. Вы можете использовать это.

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

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

Когда тест 1 ОК -> экзамен и сертификация ОК.

Когда тест 2 ОК -> сертификация ОК -> Проверьте еще раз, ОК ли тест 1 -> если ОК, сдайте ЭКЗАМЕН, если не ОК, то не продолжайте.

если вы хотите кратчайшее и условие непосредственно для переменной.. Вы можете попробовать ниже

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

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

Комментарии:

1. Вы также «перепроверяете». У меня в нем условие if(test 2 >= 15 points) дважды, у вас в нем условие if(test 1 >= 15 points) дважды. Я пытался избежать этого, но не думаю, что это возможно. В любом случае, ваш код выглядит лучше, поскольку в нем нет сертификации 2 дважды, спасибо 🙂

2. кстати, что вы имели в виду под «тестом 1» = это была переменная или функция?

3. тест 1 и тест 2 являются переменными (поэтому в реальной жизни это был бы тест (например, предварительный экзамен), где человек должен набрать не менее 15 баллов, так if(test_1>=15) что). Я написал test 1 >= 15 points , чтобы сделать его более понятным, извините, если это вас смутило.

4. нет проблем .. если бы оно было переменным, вероятно, вам понадобилось бы такое условие — см. Мой обновленный ответ @Rudi

5. На самом деле мне просто нужно отобразить его в виде изображения, чтобы другие учащиеся понимали, какой тест они должны пройти, чтобы получить сертификат и написать экзамен (они не знают ни одного языка программирования, поэтому я не хочу отображать изображение с переменными.. Просто для «нормальных людей», чтобы понять это)

Ответ №2:

При написании кода мы должны больше всего заботиться об управлении сложностью и удобочитаемостью. Уменьшение одного или двух if не следует рассматривать в качестве основного критерия. Вопрос должен заключаться в том, как мы должны спроектировать эти две логики.

Смешивание этой логики сертификации и логики экзамена не является признаком хорошего дизайна.

итак, разделение на две разные функции — это способ улучшить читаемость и добавить гибкости в вашу программу.

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

Комментарии:

1. Спасибо за решение, но моей главной проблемой / целью было не то, как создать хороший (структурированный и актуальный) код для этого решения, а как использовать его на этом сайте, чтобы получить хороший и понятный график / изображение, которое может понять нормальный человек 🙂