Matlab运行遇到“ || 和 && 运算符的操作数必须能够转换为逻辑标量值”问题。

自己写了一个寻机头的小游戏,在随机放置第二个飞机的时候有时候运行会显示“ || 和 && 运算符的操作数必须能够转换为逻辑标量值”,但是放置第一个飞机的时候就不会有问题,求帮忙看一下代码是那个地方逻辑出错了吗?
下面是部分代码:

plane=zeros(10);%设置矩阵
v1=randi(100);%随机生成第一个机头位置下标
while true
    if v1==1||v1==2||v1==9||v1==10||v1==11||v1==12||v1==19||v1==20||v1==81||v1==82||v1==89||v1==90||v1==91||v1==92||v1==99||v1==100
        v1=randi(100);%重新生成机头下标
    else
        break
    end
end%利用randi函数生成机头位置下标并利用while循环排除机头不能出现的位置

[m,n]=size(dir1);
rownum=randi([1,m],1,1);%随机选择一行
ntx1=dir1(rownum,1);%将被选中行中的x坐标赋值给ntx1,ntx1代表紧靠机头的蓝色方格的行数
nty1=dir1(rownum,2);%将被选中行中的x坐标赋值给nty1,nty1代表紧靠机头的蓝色方格的列数
%此时飞机方向已确定

if ntx1==tx1+1%机头朝上的排列
    plane([v1+1,v1+2,v1+3,v1-9,v1-19,v1+11,v1+21,v1-7,v1+13])=[1,1,1,1,1,1,1,1,1];%将机身赋值为1
elseif ntx1==tx1-1%机头朝下的排列
    plane([v1-1,v1-2,v1-3,v1+9,v1+19,v1-11,v1-21,v1+7,v1-13])=[1,1,1,1,1,1,1,1,1];%将机身赋值为1
elseif nty1==ty1+1%机头朝左的排列
    plane([v1+10,v1+20,v1+30,v1+9,v1+8,v1+11,v1+12,v1+29,v1+31])=[1,1,1,1,1,1,1,1,1];%将机身赋值为1
else%机头朝右的排列
    plane([v1-10,v1-20,v1-30,v1-9,v1-8,v1-11,v1-12,v1-29,v1-31])=[1,1,1,1,1,1,1,1,1];%将机身赋值为1
end
disp(plane)
%----------------------第一个飞机放置完毕---------------------------------------------------
%----------------------开始放置第二个飞机---------------------------------------------------


plane(v1)=2;%设置第一个机头参数为2
[tx1,ty1]=find(plane==2);%获取机头坐标并赋值给tx1,ty1


dir1=[[tx1+1 ty1];[tx1-1 ty1];[tx1 ty1+1];[tx1 ty1-1]];%机头四周的位置坐标;机头位置【上,下,左,右】
if ty1<3||ty1>8||tx1>7
    delnum1=1;%排除机头朝上的可能性
end
if ty1<3||ty1>8||tx1<4
    delnum2=2;%排除机头朝下的可能性
end
if tx1<3||tx1>8||ty1>7
    delnum3=3;%排除机头朝左的可能性
end
if tx1<3||tx1>8||ty1<4
    delnum4=4;%排除机头朝右的可能性
end
A=[delnum1, delnum2, delnum3, delnum4];%将以上判断结果写入矩阵
B=find(A>=1);%将不可能的方向写入B矩阵
for j=length(B):-1:1%利用倒序将不可能的方向删除
    dir1(B(j),:)=[];
end
%此时dir1中剩余的方向都是可实现的
plane(v2)=3;%设置第二个机头参数为3
[tx2,ty2]=find(plane==3);%获取机头坐标并赋值给tx2,ty2

dir2=[tx2+1 ty2;tx2-1 ty2;tx2 ty2+1;tx2 ty2-1];%机头四周的位置坐标;机头位置【上,下,左,右】

if ty2<3||ty2>8||tx2>7
    delnum21=1;%排除机头朝上的可能性
end
if ty2<3||ty2>8||tx2<4
    delnum22=2;%排除机头朝下的可能性
end
if tx2<3||tx2>8||ty2>7
    delnum23=3;%排除机头朝左的可能性
end
if tx2<3||tx2>8||ty2<4
    delnum24=4;%排除机头朝右的可能性
end

运行出来的结果

img

你好,这是因为ty2和tx2都是向量,里面元素个数大于1,建议改成

plane=zeros(10);%设置矩阵
v1=randi(100);%随机生成第一个机头位置下标
while true
    if v1==1||v1==2||v1==9||v1==10||v1==11||v1==12||v1==19||v1==20||v1==81||v1==82||v1==89||v1==90||v1==91||v1==92||v1==99||v1==100
        v1=randi(100);%重新生成机头下标
    else
        break
    end
end%利用randi函数生成机头位置下标并利用while循环排除机头不能出现的位置
 
[m,n]=size(dir1);
rownum=randi([1,m],1,1);%随机选择一行
ntx1=dir1(rownum,1);%将被选中行中的x坐标赋值给ntx1,ntx1代表紧靠机头的蓝色方格的行数
nty1=dir1(rownum,2);%将被选中行中的x坐标赋值给nty1,nty1代表紧靠机头的蓝色方格的列数
%此时飞机方向已确定
if ntx1==tx1+1%机头朝上的排列
    plane([v1+1,v1+2,v1+3,v1-9,v1-19,v1+11,v1+21,v1-7,v1+13])=[1,1,1,1,1,1,1,1,1];%将机身赋值为1
elseif ntx1==tx1-1%机头朝下的排列
    plane([v1-1,v1-2,v1-3,v1+9,v1+19,v1-11,v1-21,v1+7,v1-13])=[1,1,1,1,1,1,1,1,1];%将机身赋值为1
elseif nty1==ty1+1%机头朝左的排列
    plane([v1+10,v1+20,v1+30,v1+9,v1+8,v1+11,v1+12,v1+29,v1+31])=[1,1,1,1,1,1,1,1,1];%将机身赋值为1
else%机头朝右的排列
    plane([v1-10,v1-20,v1-30,v1-9,v1-8,v1-11,v1-12,v1-29,v1-31])=[1,1,1,1,1,1,1,1,1];%将机身赋值为1
end
disp(plane)
%----------------------第一个飞机放置完毕---------------------------------------------------
%----------------------开始放置第二个飞机---------------------------------------------------
 
 
plane(v1)=2;%设置第一个机头参数为2
[tx1,ty1]=find(plane==2);%获取机头坐标并赋值给tx1,ty1
 
 
dir1=[[tx1+1 ty1];[tx1-1 ty1];[tx1 ty1+1];[tx1 ty1-1]];%机头四周的位置坐标;机头位置【上,下,左,右】
if ty1<3||ty1>8||tx1>7
    delnum1=1;%排除机头朝上的可能性
end
if ty1<3||ty1>8||tx1<4
    delnum2=2;%排除机头朝下的可能性
end
if tx1<3||tx1>8||ty1>7
    delnum3=3;%排除机头朝左的可能性
end
if tx1<3||tx1>8||ty1<4
    delnum4=4;%排除机头朝右的可能性
end
A=[delnum1, delnum2, delnum3, delnum4];%将以上判断结果写入矩阵
B=find(A>=1);%将不可能的方向写入B矩阵
for j=length(B):-1:1%利用倒序将不可能的方向删除
    dir1(B(j),:)=[];
end
%此时dir1中剩余的方向都是可实现的
plane(v2)=3;%设置第二个机头参数为3
[tx2,ty2]=find(plane==3);%获取机头坐标并赋值给tx2,ty2
%% 增加的两行
tx2 = tx2(1);
ty2 = ty2(1);

dir2=[tx2+1 ty2;tx2-1 ty2;tx2 ty2+1;tx2 ty2-1];%机头四周的位置坐标;机头位置【上,下,左,右】
if ty2<3||ty2>8||tx2>7
    delnum21=1;%排除机头朝上的可能性
end
if ty2<3||ty2>8||tx2<4
    delnum22=2;%排除机头朝下的可能性
end
if tx2<3||tx2>8||ty2>7
    delnum23=3;%排除机头朝左的可能性
end
if tx2<3||tx2>8||ty2<4
    delnum24=4;%排除机头朝右的可能性
end
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632