【问题标题】:MATLAB - Error with switchMATLAB - 开关错误
【发布时间】:2014-03-12 17:21:56
【问题描述】:

当我运行以下代码时,我收到一条错误消息“SWITCH 表达式必须是标量或字符串常量。”

请注意,变量 FUD 是一个字符串元胞数组,并且 unique(FUD(i,1)) 返回一个字符。另请注意,这是一个运行时错误,因此 if 语句评估为 true。

if isscalar(unique(FUD(i,1)))  % evaluates to true, therefore it is scalar
    switch unique(FUD(i,1))    % "hurr durr durr not scalar!" <--- MATLAB
        case 'JAN_RP10 .csv'
            month=1;
            break
        case 'FEB_RP10 .csv'
            month=2;
            break
        case 'MAR_RP10 .csv'
            month=3;
            break
        case 'APR_RP10 .csv'
            month=4;
            break
        case 'MAY_RP10 .csv'
            month=5;
            break
        case 'JUN_RP10 .csv'
            month=6;
            break
        case 'JUL_RP10 .csv'
            month=7;
            break
        case 'AUG_RP10 .csv'
            month=8;
            break
        case 'SEP_RP10 .csv'
            month=9;
            break
        case 'OCT_RP10 .csv'
            month=10;
            break
        case 'NOV_RP10 .csv'
            month=11;
            break
        case 'DEC_RP10 .csv'
            month=12;
            break
        otherwise
            disp('switch error')
            break
    end
end

我不明白为什么会出现此错误。我把最初的 if 语句作为“unique(FUD(i,1))”是标量的证据。这里发生了什么?我有什么遗漏吗?

这是 FUD 的样子(10 x 3 格):

'APR_RP10 .csv' -56.5 70

'APR_RP10 .csv' -57 71

'DEC_RP10 .csv' -64 70

'DEC_RP10 .csv' -63.5 70

'DEC_RP10 .csv' -64.5 70.5

'DEC_RP10 .csv' -64 70.5

'DEC_RP10 .csv' -64 75

'FEB_RP10 .csv' -57 54

'FEB_RP10 .csv' -56.5 54.5

'FEB_RP10 .csv' -58.5 55

谢谢

【问题讨论】:

  • 什么是unique(FUD(i,1))?可以是标量函数句柄,它是标量但不允许作为 switch 表达式。
  • 如果这是完整的代码清单,则不需要 break 语句。 MATLAB 的 switch 不会失败,也不会在一个为真后评估任何其他情况,所以你只是打破了if 循环。
  • unique(FUD(i,1)) 是一个包含字符的单元格。可能的输入是字符或数字。

标签: string matlab switch-statement character scalar


【解决方案1】:

问题出在语句上:

unique(FUD(i,1))

如果你将其替换为:

x = 'JAN_RP10 .csv';
switch x;
...

一切正常。所以检查 FUD(i,1) 是什么,并检查 i 的所有值的唯一性(FUD(i,1))。 不管怎样,要说到底发生了什么,你应该举一个 FUD 细胞的例子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    相关资源
    最近更新 更多