2015-06-10 3 views
0

Я создал матрицу со строкой 1, заполненной строками, и еще 4 строки с числами. Они создаются в классе дескрипторов с объектом «Projekter».Возвращаемое значение «i», если true, если оператор if равен

Таким образом, в строке «Projekter» 1 первое значение пустое, но второе значение - «Ole». Поэтому я знаю, что «Оле» находится в (1,2). x - это имя/строка, которую я хочу найти, в этом случае это «Ole».

Как вы видите ниже он должен искать строку 1 из колонки 2 недо последнего имени/строки, и если я = «Ole», он должен принести мне значение 2, потому что «я» должен быть равен 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 
+0

Можете ли вы также указать код, в котором вы готовите данные, которые вы передаете в функцию? – ipa

+0

Функция 'find' довольно хороша в этом. Вероятно, 'find (strcmp (obj.Projeckter (1, :), x))' –

ответ

0

Может быть, вы должны индексировать содержимое ячейки:

your_cell = {'a_string'}; 
your_string = your_cell{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)==x к obj.Projekter{1,i}==x (используйте фигурные скобки вместо скобок). Затем я указал, что 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. Это имеет дополнительное преимущество

  1. не используя петлю, так что быстрее
  2. Давать вам каждое вхождение матч, а не только первый.
+1

Еще лучше, используйте 'strcmp', который не вызовет ошибку, если массивы символов имеют разную длину. –

Смежные вопросы