упрощение циклов if с несколькими условиями - PullRequest
0 голосов
/ 16 июля 2011

У меня есть цикл:

if A == 1
    A = 2;
end
if B == 1
    B = 2;
end
if C == 1
    C = 2;

... и т.д. Теперь это, конечно, занимает много времени, но если я напишу это как:

if A == 1 || B == 1 || C == 1
    A = 2; B = 2; C = 2;
end

он изменит все параметры, если любой из них равен '1' То, что я хотел бы, это простой цикл, где я могу сказать, что если A или B или C или ... равен 'X', то новое значение только того, которое равно 'X', изменится на новое значение, без необходимости писать это, как я делал в первом примере. Спасибо

Ответы [ 4 ]

7 голосов
/ 16 июля 2011

Может быть, если вы сгруппируете их по вектору, вы можете сделать:

params = [A B C];
params(params==1) = 2;
1 голос
/ 16 июля 2011

Если вы можете изменить свой код, чтобы одна переменная указывала на разные случаи, оператор switch предлагает элегантный метод для решения вашей задачи.

switch yourNumber
    case 1
        A = 2;
    case 2
        B = 2;
    case 3
        C = 2;
    otherwise
        disp('unknown value');
end

Где yourNumber могут быть присвоены значения 1,2 или 3.

0 голосов
/ 04 февраля 2016

если вы напишите

if A == 1 || B == 1 || C == 1
    A = 2; B = 2; C = 2;
end

При любом из этих условий все A, B и C будут равны 2!и это не то же самое!Лучше всего сгруппировать их по вектору.

0 голосов
/ 16 июля 2011

Не думаю, что вы должны использовать нечитаемый код, но технически вы можете получить его до трех строк без символов if:

A = abs(sign(A - 1)) * A + (1 - abs(sign(A - 1)) * 2
(same for B and C)

Да, это безумие, и, как я уже сказал, я бы не советовал ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...