Can you put a switch statement within an IF statement?
古いコメントを表示
I want two values to be set if two conditions are true. A and B are absolute decimal numbers. array(k,j+1) is either the value 12345 or a complex number with decimals. I tried:
if (A<B) && (array(k,j+1) == 12345)
B = A
C= k
end
Because this didn't work (not desired output), I tried an if statement within a switch statement:
switch array(k,j+1)
case 12345
if A<B
B=A
C=k
end
otherwise
;
end
This also didn't work (not desired output), so I tried:
if A < B
B=A
switch array(k,j+1)
case 12345
C= k
otherwise
;
end
end
It seems that none of these things give the desired output, has anyone and idea/suggestions?
回答 (2 件)
Niels
2017 年 1 月 14 日
0 投票
all off them work but not as you expect them to
i suppose A and B are matrices...
check the output of A<B and when it is "true", this should solve your problem
Image Analyst
2017 年 1 月 14 日
The first one should work if A & B are scalars. Because they didn't it's possible that array or the 12345 number may be floating point, double numbers, NOT integers. If they're not pure integers, like int32 or uint16 or whatever, or at least doubles with integer values, then you need to read and understand the FAQ: http://matlab.wikia.com/wiki/FAQ#Why_is_0.3_-_0.2_-_0.1_.28or_similar.29_not_equal_to_zero.3F
If A & B are arrays and you want to test that every single value of A is less than the corresponding B at that location, and array and 12345 might be some floating point numbers then you can do
if all(A<B) && abs(array(k, j+1) - 12345) < someSmallToleranceNumber
B = A
C = k
end
9 件のコメント
belle
2017 年 1 月 14 日
Image Analyst
2017 年 1 月 14 日
Then this will probably work:
if A < B && abs(array(k, j+1) - 12345) > 0.0001
B = A
C = k
end
You'll enter the if block if A is less than B AND array is not 12345 (no matter whether it's complex or real). Both conditions must be true. If just one is true then it will not enter the if block.
belle
2017 年 1 月 14 日
Niels
2017 年 1 月 14 日
nope, you dont have to declare C
you would only have to, if you set another variable to C, like
Case= C; % and C never used or declared before
belle
2017 年 1 月 14 日
Niels
2017 年 1 月 14 日
can you maybe give us the values of A, B ans array(k, j+1)?
Image Analyst
2017 年 1 月 14 日
What problem? You forgot to attach the error message. You're simply setting C equal to k, and k definitely exists or else you would have had trouble referencing array(k, j+1). I can't imagine any problem with setting C equal to k, so show your actual code, not this pseudocode.
belle
2017 年 1 月 14 日
カテゴリ
ヘルプ センター および File Exchange で Entering Commands についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!