主要内容

switch, case, otherwise

执行多组语句中的一组

语法

switch switch_expression
   case case_expression
      statements
   case case_expression
      statements
    ...
   otherwise
      statements
end

说明

switch switch_expression, case case_expression, end 计算表达式并选择执行多组语句中的一组。每个选项为一个 case。

switch 块会测试每个 case,直至一个 case 表达式为 true。case 在以下情况下为 true:

  • 对于数字,case_expression == switch_expression

  • 对于字符向量和字符串,strcmp(case_expression,switch_expression) == 1。字符向量元胞数组是一种特殊情况,即如果元胞数组的至少一个元素匹配,则 case 将匹配。

  • 对于支持 eq 函数的对象,case_expression == switch_expression。重载的 eq 函数的输出必须为逻辑值或可转换为逻辑值。

  • 对于元胞数组 case_expression,元胞数组的至少一个元素与 switch_expression 匹配,如上述对数字、字符向量和对象的定义。

当 case 表达式为 true 时,MATLAB® 执行对应的语句,然后退出 switch 块。

计算的 switch_expression 必须为标量或字符向量。计算的 case_expression 必须为标量、字符向量或者标量或字符向量的元胞数组。

otherwise 块是可选的。仅当没有 case 为 true 时,MATLAB 才会执行这些语句。

示例

示例

全部折叠

根据在命令提示符下输入的值有条件地显示不同的文本。

n = input('Enter a number: ');

switch n
    case -1
        disp('negative one')
    case 0
        disp('zero')
    case 1
        disp('positive one')
    otherwise
        disp('other value')
end

在命令提示符下,输入数字 1。

positive one

重复执行该代码并输入数字 3。

other value

基于 plottype 的值确定要创建哪种类型的绘图。如果 plottype'pie''pie3',则创建一个三维饼图。使用元胞数组包含两个值。

x = [12 64 24];
plottype = 'pie3';

switch plottype
    case 'bar' 
        bar(x)
        title('Bar Graph')
    case {'pie','pie3'}
        pie3(x)
        title('Pie Chart')
    otherwise
        warning('Unexpected plot type. No plot created.')
end

Figure contains an axes object. The hidden axes object with title Pie Chart contains 12 objects of type patch, surface, text.

提示

  • case_expression 不能包含关系运算符(例如 <>)来与 switch_expression 进行比较。要测试不相等性,请使用 if, elseif, else 语句。

  • MATLAB switch 语句不会像 C 语言的 switch 语句一样失效。如果第一个 case 语句为 true,则 MATLAB 不会执行其他 case 语句。例如:

    result = 52;
    
    switch(result)
       case 52
          disp('result is 52')
       case {52, 78}
          disp('result is 52 or 78')
    end
    result is 52
  • 在该 case 内定义特定 case 中的代码所需要的变量。由于 MATLAB 仅执行任何 switch 语句的一个 case,因此一个 case 内定义的变量不适用于其他 case。例如,如果当前工作区不包含变量 x,则仅定义 x 的情况可以使用它:

    switch choice
       case 1
          x = -pi:0.01:pi;
       case 2
          % does not know anything about x
    end
  • MATLAB break 语句会结束 forwhile 循环的执行,但不结束 switch 语句的执行。此行为不同于 C 语言中 breakswitch 的行为。

扩展功能

全部展开

版本历史记录

在 R2006a 之前推出

另请参阅

| | |