Matlab Return";我";if语句为true时的值

Matlab Return";我";if语句为true时的值,matlab,if-statement,Matlab,If Statement,我创建了一个矩阵,其中第1行充满字符串,其他4行包含数字。它们是在具有对象“Projekter”的句柄类中创建的 因此,在对象“Projekter”第1行中,第一个值为空,但第二个值为“Ole”。所以我知道‘Ole’在(1,2)中。x是我要搜索的名称/字符串,在本例中是“Ole” 正如您在下面看到的,它应该从第2列搜索第1行,直到最后一个名称/字符串,如果i='Ole',它应该给我带来值2,因为“i”应该等于2 如果函数工作,A只是一个控制器,但在这一点上它不工作。 它给出的错误是“未定义‘ce

我创建了一个矩阵,其中第1行充满字符串,其他4行包含数字。它们是在具有对象“Projekter”的句柄类中创建的

因此,在对象“Projekter”第1行中,第一个值为空,但第二个值为“Ole”。所以我知道‘Ole’在(1,2)中。x是我要搜索的名称/字符串,在本例中是“Ole”

正如您在下面看到的,它应该从第2列搜索第1行,直到最后一个名称/字符串,如果i='Ole',它应该给我带来值2,因为“i”应该等于2

如果函数工作,A只是一个控制器,但在这一点上它不工作。 它给出的错误是“未定义‘cell’类型输入参数的函数‘eq’。”

如何修复此问题,使其在语句正确时返回“I”值

提前谢谢你

function number(obj,x)

A = [];
for i = 2:size(obj.Projekter,2)
    if obj.Projekter(1,i)==x
        A = A + 1;
    end
end
disp(A)

end

也许您必须为单元格内容编制索引:

your_cell = {'a_string'};
your_string = your_cell{1};
注意从
obj.Projekter(1,i)==x
obj.Projekter{1,i}==x
(使用大括号代替括号)的变化。然后我指定
returnValue
将保存通过执行
函数[returnValue]=number(obj,x)
应该返回的值。然后,我们将
returnValue
设置为等于
i
,并在if语句的条件为true时从函数返回

正如评论中所建议的,最好是:

function [returnValue] = number(obj, x)
  returnValue = find(strcmp(x, obj.Projekter) == 1);
strcmp(x,obj.Projektor)
将为您提供一个数组,数组长度为
obj.Projekter
,字符串匹配的地方为1,不匹配的地方为0,然后您可以
查找设置为1的索引。这样做的另一个好处是

  • 不使用循环,因此速度更快
  • 给你比赛的每一次机会,而不仅仅是第一次

  • 您还可以提供代码来准备传递到函数中的数据吗?
    find
    函数在这方面非常出色。可能
    find(strcmp(obj.Projeckter(1,:),x))
    更好的方法是使用
    strcmp
    ,如果字符数组的长度不同,这不会导致错误。
    function [returnValue] = number(obj, x)
      returnValue = find(strcmp(x, obj.Projekter) == 1);