Switch/Case and operators

145 views (last 30 days)
googo
googo on 25 Mar 2013
Commented: samaneh on 23 May 2021
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
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

Sign in to comment.

Accepted Answer

Azzi Abdelmalek
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
googo
googo on 25 Mar 2013
Thanks for the comment! But it will be a little bit long because I need to check a specific date if the year is less then 1000 or 100 or 10 and put 3/2/1 zeros before respectivlly.. for example 1/1/800 will be 1/1/0800 same for the days and the month, if the month is less than 10... any way to shorten this out? if not... I guess I can write a number of if's but maybe there is another suggestion... thank you very much...
Azzi Abdelmalek
Azzi Abdelmalek on 25 Mar 2013
This is not clear

Sign in to comment.

More Answers (3)

Jan
Jan on 25 Mar 2013
Don't do this. Let sprintf care about leading zeros:
a = [1,2,800];
sprintf('%d/%d/%04d', a);

Benhur Tekeste
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
Walter Roberson
Walter Roberson on 14 Feb 2019
change the switch x to switch true and then it will work.

Sign in to comment.


thejas av
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
Walter Roberson
Walter Roberson on 20 May 2021
It is not clear how this is relevant to the Question ?

Sign in to comment.

Tags

Community Treasure Hunt

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

Start Hunting!