我和我的导师正在解决模拟战争纸牌游戏的问题。规则中唯一的变化是两张具有相同价值的牌都被丢弃。
我和我的导师想出了一个解决方案
deck1 = randi(13,1,26);
deck2 = randi(13,1,26);
winner1 = 0;
winner2 = 0;
n = 1;
while (length(deck1) ~= 0 || length(deck1) ~= 0)
n = length(deck1);
m = length(deck2);
if deck1(1) == deck2(1)
deck1(1) = [];
deck2(1) = [];
elseif deck1(1) < deck2(1)
winner2 = winner2 + 1;
deck2(m+1) = deck2(1);
deck1(1) = [];
deck2(1) = [];
else
deck1(27) = deck1(1);
deck1(n+1) = deck2(1);
deck1(1) = [];
deck2(1) = [];
winner1 = winner1 + 1;
end
end
if winner1 > winner2
k = 1;
elseif winner1 == winner2
k = 0;
else k = 2;
end
disp(k)
循环适用于 k=2 和 k=0,但不适用于 k=1。它返回以下内容
Index exceeds matrix dimensions.
Error in TutorVersionWarCardGame (line 16)
if deck1(1) == deck2(1)
我应该如何编辑循环?
您在 while 循环中比较deck1
2 次,如下所示
while (length(deck1) ~= 0 || length(deck1) ~= 0)
我认为应该是
while (length(deck1) ~= 0 || length(deck2) ~= 0)
编辑:
我添加了 try catch 来检查while
循环内的if
条件。我发现矩阵不断减小,直到它的大小达到 0,因此,我在(length(deck1) ~= 0 && length(deck2) ~= 0)
时用 &&
替换||
,但现在结果总是 k=2。
这对
我有用:
deck1 = randi(13,1,26);
deck2 = randi(13,1,26);
winner1 = 0;
winner2 = 0;
n = 1;
while (~isempty(deck1) && ~isempty(deck2))
n = length(deck1);
m = length(deck2);
if deck1(1) == deck2(1)
deck1(1) = [];
deck2(1) = [];
elseif deck1(1) < deck2(1)
winner2 = winner2 + 1;
deck2(m+1) = deck2(1);
deck1(1) = [];
deck2(1) = [];
else
deck1(27) = deck1(1);
deck1(n+1) = deck2(1);
deck1(1) = [];
deck2(1) = [];
winner1 = winner1 + 1;
end
end
if winner1 > winner2
k = 1;
elseif winner1 == winner2
k = 0;
else
k = 2;
end
disp(k);