Получите случай переключения, чтобы вызвать случай переключения вместо того, чтобы пробегать все их - PullRequest
0 голосов
/ 31 августа 2018

Ниже вы можете увидеть мой код. Когда я запускаю это, я получаю ответы от всех трех операторов switch. Я хочу, чтобы только один ответ от одного из операторов переключения и другие два игнорировались. Как мне это сделать?

function grashofrough(a, b, c, d)

% The variables a,b,c, and d are variables to 
%   represent the length of each length
Lengths = [ a b c d ]; 
S=min(Lengths);
L=max(Lengths);

%This will direct to 'Grashof' cases
Grashof = L+S < sum(Lengths)-(S+L); 

%This will direct to 'Non-grashof' cases
NGRASH = L+S > sum(Lengths)-(S+L);

%This will direct to 'Special Grashof' cases
SpecGrashof = L+S == sum(Lengths)-(S+L); 



switch Grashof 
    case S == a
        disp("GCCC")
    case S == b
        disp("GCRR")
    case S == c
        disp("GRCR")
    case S == d
        disp("GRRC")
    otherwise
        return
end

switch NGRASH
    case L == a
        disp("RRR1")
    case L == b
        disp("RRR1")
    case L == c
        disp("RRR3")
    case L == d
        disp("RRR4")
    otherwise
        return
end

switch SpecGrashof
    case S == a
        disp("SCCC")
    case S == b
        disp("SCRR")
    case S == c
        disp("SRCR")
    case S == d
         disp("SRRC")
    otherwise
         return
end

1 Ответ

0 голосов
/ 31 августа 2018

Я думаю, что вы хотите выбрать один из вариантов переключения в зависимости от того, какой из Grashof, NGRASH или SpecGrashof имеет значение true. Для этого вам нужно использовать оператор if.

Вы используете switch неверно, аргумент switch является переменной, различные случаи являются возможными значениями этой переменной. Я предлагаю вам прочитать документацию .

Это то, что вы намеревались написать:

if Grashof
  switch S
    case a
      disp("GCCC")
    case b
      disp("GCRR")
    case c
      disp("GRCR")
    case d
      disp("GRRC")
    otherwise
      return
  end
elseif NGRASH
  switch L
    case a
      disp("RRR1")
    case b
      disp("RRR1")
    case c
      disp("RRR3")
    case d
      disp("RRR4")
    otherwise
      return
  end
else % SpecGrashof must be true here, no need to test for it
  switch S
    case a
      disp("SCCC")
    case b
      disp("SCRR")
    case c
      disp("SRCR")
    case d
       disp("SRRC")
    otherwise
       return
  end
end

Но, учитывая ваше определение этих трех случаев:

Grashof = L+S < sum(Lengths)-(S+L); %This will direct to 'Grashof' cases
NGRASH = L+S > sum(Lengths)-(S+L); %This will direct to 'Non-grashof' cases
SpecGrashof = L+S == sum(Lengths)-(S+L); %This will direct to 'Special Grashof' cases

Вы также можете включить знак следующего значения:

K = (L+S) - (sum(Lengths)-(S+L));
switch sign(K)
  case -1 % Grashof cases
    % ...
  case 1 % NGRASH cases
    % ...
  case 0 % Special Grashof cases
    % ...
end

, где в каждом случае вы помещаете оператор switch в S или L, как указано выше.

...