Matlab:;矩阵超出尺寸误差“;在While循环中?

Matlab:;矩阵超出尺寸误差“;在While循环中?,matlab,loops,while-loop,Matlab,Loops,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 = l

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

我的导师和我想出了一个解决办法

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)
我应该如何编辑循环?

这对我很有用:

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);
deck1=randi(13,1,26);
deck2=randi(13,1,26);
winner1=0;
winner2=0;
n=1;
而(~isempty(deck1)和&~isempty(deck2))
n=长度(1);
m=长度(2);
如果甲板1(1)=甲板2(1)
第1(1)条=[];
第2(1)条=[];
其他甲板1(1)<甲板2(1)
winner2=winner2+1;
甲板2(m+1)=甲板2(1);
第1(1)条=[];
第2(1)条=[];
其他的
甲板1(27)=甲板1(1);
甲板1(n+1)=甲板2(1);
第1(1)条=[];
第2(1)条=[];
winner1=winner1+1;
结束
结束
如果winner1>winner2
k=1;
elseif winner1==winner2
k=0;
其他的
k=2;
结束
disp(k);
这对我很有用:

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);
deck1=randi(13,1,26);
deck2=randi(13,1,26);
winner1=0;
winner2=0;
n=1;
而(~isempty(deck1)和&~isempty(deck2))
n=长度(1);
m=长度(2);
如果甲板1(1)=甲板2(1)
第1(1)条=[];
第2(1)条=[];
其他甲板1(1)<甲板2(1)
winner2=winner2+1;
甲板2(m+1)=甲板2(1);
第1(1)条=[];
第2(1)条=[];
其他的
甲板1(27)=甲板1(1);
甲板1(n+1)=甲板2(1);
第1(1)条=[];
第2(1)条=[];
winner1=winner1+1;
结束
结束
如果winner1>winner2
k=1;
elseif winner1==winner2
k=0;
其他的
k=2;
结束
disp(k);

在while循环中比较
deck1
2次,如下所示

while (length(deck1) ~= 0 || length(deck1) ~= 0)
我想应该是这样

while (length(deck1) ~= 0 || length(deck2) ~= 0)
编辑:


我添加了检查
while
循环中的
if
条件。我发现矩阵一直减小,直到它的大小达到0,因此,我将
|
替换为
&&
,而
(length(deck1)~=0&&length(deck2)~=0)
,但结果现在总是k=2。

在while循环中比较
deck1
两次,如下所示

while (length(deck1) ~= 0 || length(deck1) ~= 0)
我想应该是这样

while (length(deck1) ~= 0 || length(deck2) ~= 0)
编辑:


我添加了检查
while
循环中的
if
条件。我发现矩阵一直减小直到它的大小达到0,因此,我用
&
替换
|124;
,而
(长度(deck1)~=0和长度(deck2)~=0)
但是结果现在总是k=2。

为什么
~isempty(deck1)| ~isempty(deck2)
但是
(长度(deck1)~=0 |长度(deck1)~=0)
没有?请阅读官方文档中的长度。。。你会明白为什么的!:)我再次检查了你的代码。它不适用于k=1和k=0。我的MATLAB程序有点问题。另外,你有没有注意到在while循环条件下,你只是在检查deck1的大小?我编辑了我的答案!我更改了代码,但我得到了错误“索引超出矩阵维度”和“第16行中的错误:如果deck1(1)=deck2(1)”为什么
~isempty(deck1)| | | isempty(deck2)
但是
(length(deck1)~=0 | | length(deck1)~=0)
没有?请阅读官方文档中关于长度的内容。。。你会明白为什么的!:)我再次检查了你的代码。它不适用于k=1和k=0。我的MATLAB程序有点问题。另外,你有没有注意到在while循环条件下,你只是在检查deck1的大小?我编辑了我的答案!我更改了代码,但得到了错误“索引超出矩阵维度”和“第16行中的错误:如果deck1(1)==deck2(1)”谢谢,但我仍然收到错误消息“索引超出矩阵维度”以及“第16行中的错误:如果deck1(1)==deck2(1)”我明白了。我添加了检查
while
循环中的
if
条件。我发现矩阵一直在减小,直到它的大小达到0,因此,我用&&
替换| |,而(length(deck1)~=0&&length(deck2)~=0)
但结果现在总是k=2。我几天前就知道了。谢谢你的回复。我接受你的回答,虽然你应该添加你的评论。谢谢,但我仍然收到错误消息“索引超过矩阵维度”以及“第16行中的错误:如果deck1(1)==deck2(1)”我明白了。我添加了检查
while
循环中的
if
条件。我发现矩阵一直在减小,直到它的大小达到0,因此,我用&&
替换| |,而(length(deck1)~=0&&length(deck2)~=0)
但结果现在总是k=2。我几天前就知道了。谢谢你的回复。我接受你的回答,不过你应该加上你的评论。