Switch/Case and operators
145 views (last 30 days)
Show older comments
I running this code and and I don't understand why it is writing me that x is less than y... can you help me figure this out?
>> x = 222, y = 3;
switch x
case x==y
disp('x and y are equal');
case x>y
disp('x is greater than y');
otherwise
disp('x is less than y');
end
x =x =
222
x is less than y
thank's.
3 Comments
samaneh
on 23 May 2021
Dear Googo,
The resullt of Relational Operators is Boolean meaning it takes value 1 for true and 0 for false. Hence case can only be 0 or 1 in your code, which is not desired velue for your x. That's why "otherwise" and "disp('x is less than y');" will be executed for any value of your x and y.
The solution is that, you put x beside of your Relational Operators to keep the value of the x, such as bellow.
>> x = 222, y = 3;
switch x
case x*(x==y)
disp('x and y are equal');
case x*(x>y)
disp('x is greater than y');
otherwise
disp('x is less than y');
end
%%%%%% Result %%%%%
x =
222
x is greater than y
Accepted Answer
Azzi Abdelmalek
on 25 Mar 2013
Edited: Azzi Abdelmalek
on 25 Mar 2013
In your case you should use if/elseif
x = 222, y = 3;
if x==y
disp('x and y are equal');
elseif x>y
disp('x is greater than y');
else
disp('x is less than y');
end
2 Comments
More Answers (3)
Jan
on 25 Mar 2013
Don't do this. Let sprintf care about leading zeros:
a = [1,2,800];
sprintf('%d/%d/%04d', a);
0 Comments
Benhur Tekeste
on 14 Feb 2019
Hi, there.
From my point of view, the resullt of comparison operation is Boolean meaning it takes value 1 for true and 0 for false. Hence first the relational operation besides the case is evaluated and then compared to the expression besides the switch.
x = 222, y = 3;
switch x
case x==y % once the program runs, it will find that x is not equal to y meaning it is false and it
has value of zero. And zero is not equal to the value of x therefore it willnot
execute this body.
disp('x and y are equal');% same here too but x is greater than y it is true and has value of 1 but
1 is not equal to 222 therefore body in otherwise is executed
case x>y
disp('x is greater than y');
otherwise
disp('x is less than y');
end
1 Comment
thejas av
on 20 May 2021
Edited: Walter Roberson
on 20 May 2021
switch(m)
case 1
if(d>=1 && d<=19)
message = sprintf('\noptimistic, lovers of freedom, hilarious, fair-minded, honest and intellectual. \nThey are spontaneous and fun, usually with a lot of friends');
%data=text( message, 'FontSize',12, 'Color', [.6 .2 .6]);
text(-1800,800,message, 'FontSize',9, 'Color', [.6 .2 .6]);
else
message = sprintf('\nThey are ambitious, organized, practical, goal-oriented, and they do not mind the hustle.\n“They are ready to give up a lot in order to achieve that goal,” Verk says. \nThey also love making their own rules, which means they strive to reach high career positions.');
%data=text( message, 'FontSize',12, 'Color', [.6 .2 .6]);
text(-1800,800,message, 'FontSize',9, 'Color', [.6 .2 .6]);
end
case 2
if(d>=1 && d<=19)
message = sprintf('\nThey are ambitious, organized, practical, goal-oriented, and they do not mind the hustle.\n“They are ready to give up a lot in order to achieve that goal,” Verk says. \nThey also love making their own rules, which means they strive to reach high career positions.');
%data=text( message, 'FontSize',12, 'Color', [.6 .2 .6]);
text(-1800,800,message, 'FontSize',9, 'Color', [.6 .2 .6]);
else
message = sprintf('\n Progressive, original, independent, humanitarian\nRuns from emotional expression, temperamental, uncompromising, aloof\nFun with friends, helping others, fighting for causes, intellectual conversation, a good listener\n Limitations, broken promises, being lonely, dull or boring situations, people who disagree with them.');
%data=text( message, 'FontSize',12, 'Color', [.6 .2 .6]);
text(-1800,800,message, 'FontSize',9, 'Color', [.6 .2 .6]);
end
end
1 Comment
See Also
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!