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。我几天前就知道了。谢谢你的回复。我接受你的回答,不过你应该加上你的评论。