Matlab:"Matrix Exceeds Dimensions Error" in while Loop?



我和我的导师正在解决模拟战争纸牌游戏的问题。规则中唯一的变化是两张具有相同价值的牌都被丢弃。

我和我的导师想出了一个解决方案

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);

最新更新