当if语句为真时返回“i”值

时间:2015-06-10 19:24:57

标签: matlab if-statement

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

因此,在对象“Projekter”第1行中,第一个值为空,但第二个值为“Ole”。所以我知道'Ole'在(1,2)中。 x是我想要搜索的名称/字符串,在这种情况下是'Ole'。

如下所示,它应该从第2列搜索第1行,直到最后一个名字/字符串,如果i ='Ole',它应该为我带来值2,因为“i”应该等于2.

如果函数有效,A只是一个控制器,但此时却没有。 它给出的错误是“未定义的函数'eq',用于'cell'类型的输入参数。”

如何修复此问题,以便在语句正确时返回“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

2 个答案:

答案 0 :(得分:0)

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

your_cell = {'a_string'};
your_string = your_cell{1};

答案 1 :(得分:0)

function [returnValue] = number(obj,x)

for i = 2:size(obj.Projekter,2)
    if obj.Projekter{1,i}==x
        returnValue = i;
        return;
    end
end
end

请注意从obj.Projekter(1,i)==xobj.Projekter{1,i}==x的更改(使用花括号而不是parens)。然后我指定returnValue将保留应该通过执行function [returnValue] = number(obj,x)返回的值。然后我们将returnValue设置为等于i,并在if语句的条件为真时从函数返回。

正如评论中所建议的那样,最好这样做:

function [returnValue] = number(obj, x)
  returnValue = find(strcmp(x, obj.Projekter) == 1);

strcmp(x, obj.Projektor)将为您提供一个数组obj.Projekter的长度,其中1表示字符串匹配,0表示不匹配,然后您可以find设置为这有额外的好处

  1. 没有使用循环所以它更快
  2. 每次出现一场比赛,而不仅仅是第一场比赛。