【问题标题】:MATLAB: How do I clean up this "if" block?MATLAB:如何清理这个“if”块?
【发布时间】:2015-12-02 15:27:16
【问题描述】:

我有一个 if...elseif...elseif...block,我认为我只需要一个“结束”在最后。但是,除非我结束每个单独的“elseif”语句,否则我会收到错误消息。代码如下:

if final_grade >= 90;
    letter_grade='A+';
else if final_grade < 90 & final_grade > 80;
       letter_grade='A';
else if final_grade < 80 & final_grade >= 76;
        letter_grade='B+';
else if final_grade < 76 & final_grade >= 73;
        letter_grade='B';
else if final_grade < 73 & final_grade >= 70;
        letter_grade='B-';
else if final_grade < 70 & final_grade >= 60;
        letter_grade='C+';
else if final_grade < 60 & final_grade >= 50;
        letter_grade='C';
else if final_grade < 50 & final_grade >= 40;
        letter_grade='D';
else if final_grade < 50 || exam_grade < 50;
        letter_grade='F';
else if exam_grade < 50
        letter_grade = 'F'; 
    end
    end
    end
    end 
    end
    end
    end
    end
    end
end

出于某种原因,这是我的代码工作的唯一方式。如果我只写一个“结束”,MATLAB 会告诉我缺少一个或多个结束。有谁知道如何将其压缩到一个最终的“结束”?

【问题讨论】:

  • Reading the documentation 可能会有所帮助。
  • 加上最后一行没有用,因为上面已经检查过了 (exam_grade&lt;50)
  • 对于您的elseif 条件,您不需要检查上限,因为之前的条件会匹配。这假设您的条件顺序正确。

标签: matlab


【解决方案1】:

我相信这就是你想要的:

    CENT_GRADES = [  40,  50,   60,   70,  73,   76,  80,   90];
    LETT_GRADES = { 'D', 'C', 'C+', 'B-', 'B', 'B+', 'A', 'A+'};

    ix_grade = find(final_grade >= CENT_GRADE, 1, 'last');

    if exam_grade < 50 || isempty(ix_grade)
            letter_grade = 'F';
    else
            letter_grade = LETT_GRADES{ix_grade};
    end

请注意,执行方式与您的不同:exam_grade 小于 50 的人无法通过考试。

【讨论】:

    【解决方案2】:

    使用elseif 关键字代替else if 两个关键字。这使事物保持在原始的嵌套级别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多