当我运行包含以下内容的代码时,如果x为3,它将运行case 3中的指令并完全退出switch语句。但我希望它继续使用案例2和案例1.但是,如果x为1,它应该只运行案例1中的指令(就像在C / C ++中没有中断的switch-case)。
switch (x)
case 3
k1= bitxor(k1,bitshift(tail(3),16));
case 2
k1= bitxor(k1,bitshift(tail(2),8));
case 1
k1= bitxor(k1,tail(1));
k1 = k1*c1;
otherwise
disp('error');
end
如上所述,分别运行这些案例的最有效方法是什么?我不能使用switch-case它也可以是条件。
答案 0 :(得分:1)
我不会在 HamtaroWarrior 提出的if语句中更改x
的值。这会导致副作用,不干净代码!更好地使用||
- 运算符(OR)来捕获这样的不同情况:
if(x == 3)
k1= bitxor(k1,bitshift(tail(3),16));
end
if((x == 3) || (x == 2))
k1= bitxor(k1,bitshift(tail(2),8));
end
if((x == 3) || (x == 2) || (x == 1))
k1= bitxor(k1,tail(1));
k1 = k1*c1;
end
if ~any(x == 1:3)
disp('error');
end
答案 1 :(得分:1)
此处的其他解决方案工作正常,但在这两种解决方案中,您需要多次重复切换表达式。您可以在数组中定义它们的顺序并进行一次比较。然后cumsum
可帮助您启用剩余的切换案例:
s = cumsum(x == [3 2 1]);
if s(1)
k1= bitxor(k1,bitshift(tail(3),16));
end
if s(2)
k1= bitxor(k1,bitshift(tail(2),8));
end
if s(3)
k1= bitxor(k1,tail(1));
k1 = k1*c1;
end
if ~any(s)
disp('error');
end
答案 2 :(得分:0)
我会亲自去寻找if
条件
if x == 3
k1= bitxor(k1,bitshift(tail(3),16));
x = 2;
end
if x == 2
k1= bitxor(k1,bitshift(tail(2),8));
x = 1;
end
if x == 1
k1= bitxor(k1,tail(1));
k1 = k1*c1;
end
if ~any(x == 1:3)
disp('error');
end