我想比较石头剪刀布游戏文本框中的字符串。比较后,在另一个文本框中显示结果。但它不比较。有人能帮我吗?
if strcmp('Rock'==get(handles.computer,'string'),'Rock'==get(handles.player,'string'))
set(handles.result,'string','Draw');
elseif strcmp('Rock'==get(handles.computer,'string'),'Paper'==get(handles.player,'string'))
set(handles.result,'string','Player wins');
elseif strcmp('Rock'==get(handles.computer,'string'),'Scissors'==get(handles.player,'string'))
set(handles.result,'string','Computer wins');
elseif strcmp('Paper'==get(handles.computer,'string'),'Rock'==get(handles.player,'string'))
set(handles.result,'string','Computer wins');
elseif strcmp('Paper'==get(handles.computer,'string'),'Paper'==get(handles.player,'string'))
set(handles.result,'string','Draw');
elseif strcmp('Paper'==get(handles.computer,'string'),'Scissors'==get(handles.player,'string'))
set(handles.result,'string','Player wins');
elseif strcmp('Scissors'==get(handles.computer,'string'),'Rock'==get(handles.player,'string'))
set(handles.result,'string','Player wins');
elseif strcmp('Scissors'==get(handles.computer,'string'),'Paper'==get(handles.player,'string'))
set(handles.result,'string','Computer wins');
elseif strcmp('Scissors'==get(handles.computer,'string'),'Scissors'==get(handles.player,'string'))
set(handles.result,'string','Draw');
end
字符串
2条答案
按热度按时间0wi1tuuw1#
问题在于比较两个文本框的字符串的方式:
字符串
在这份声明中:
型
一个元素一个元素地比较两个字符串的字符。
此比较返回
logical
类型的数组(如果第一个字符串的第i个字符等于第二个字符串的第i个字符,则返回1
,否则返回0
)请注意,如果两个字符串的长度不同,您将得到一个错误,如
Matrix dimensions must agree.
这同样适用于声明的第二部分:
型
如果 * 计算机 * 和 * 播放器 * 都插入了相同的字符串(例如 Rock),那么您将使用
strcmp
来比较两个logical
数组,并且失败。cases
因此,您必须直接比较字符串。一个可能的解决方案是使用
switch
语句:lower case
(Rock 和 Rock 是相同的)switch
的cases
包含不同的组合一种可能的实现方式可以是:
型
的数据
希望这对你有帮助,
卡普拉
b91juud32#
作为@il_raffa的替代方案,我建议分别将
rock
、scissor
、paper
Map到[1,2,3]
,然后从player
中减去computer
的值。然后你可以很容易地做
if, else if, else
。字符串
当只有9个条件时,
switch, case
可能不是什么大问题,但如果条件的数量更多,这种技术将使工作变得更容易。