Switch/Case and operators

38 visualizaciones (últimos 30 días)
googo
googo el 25 de Mzo. de 2013
Comentada: samaneh el 23 de Mayo de 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 comentarios
Nitigya Joshi
Nitigya Joshi el 2 de Mzo. de 2021
ok
samaneh
samaneh el 23 de Mayo de 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

Iniciar sesión para comentar.

Respuesta aceptada

Azzi Abdelmalek
Azzi Abdelmalek el 25 de Mzo. de 2013
Editada: Azzi Abdelmalek el 25 de Mzo. de 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 comentarios
googo
googo el 25 de Mzo. de 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 el 25 de Mzo. de 2013
This is not clear

Iniciar sesión para comentar.

Más respuestas (3)

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

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

Iniciar sesión para comentar.


thejas av
thejas av el 20 de Mayo de 2021
Editada: Walter Roberson el 20 de Mayo de 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 comentario
Walter Roberson
Walter Roberson el 20 de Mayo de 2021
It is not clear how this is relevant to the Question ?

Iniciar sesión para comentar.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by