How to code "if (a and b) or (c and d)"

9 views (last 30 days)
CA
CA on 5 Dec 2016
Commented: CA on 5 Dec 2016
I'm writing a code where I need a conditional statement something like the following:
x = 1;
y = 2;
if (((x || y == 1) && (x || y == 3))) || (((x || y == 2) && (x || y == 3))
fprintf('true');
else
fprintf('false');
end;
I tried this, but it keeps outputting "true", when I want it to output "false". I want it to say "If (x or y is 1) and (x or y is 3), or if (x or y is 2) and (x or y is 3), then...". But that clearly isn't what this is saying. Please help!

Accepted Answer

Stephen23
Stephen23 on 5 Dec 2016
Edited: Stephen23 on 5 Dec 2016
This does not do what you want (because you are not comparing x with anything, so MATLAB treats the x as true if it is non-zero):
if (((x || y == 1) && ...
You have to compare x first, then perform the or operation:
if (((x==1 || y==1) && ...
You can try this yourself:
>> (3 || 2==4) % 3 is non-zero, treated as true, therefore output is true
ans = 1
>> (3==4 || 2==4) % test if 3==4 and 2==4
ans = 0
  1 Comment
CA
CA on 5 Dec 2016
Yeah, I realized this about 10 minutes after I posted the question, but didn't know how to find my question again to correct my mistake. Thanks though!

Sign in to comment.

More Answers (0)

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!