想要通过for和if循环从已经生成的颜色数组中按照条件生成两个新的颜色数组,但是最后输出的两个数组discolor1和discolor2还是原来的zeros(180,3)的样子,想知道我的代码到底是哪里出了问题呢?代码中的randIndexList1是一个已经存在的(180,3)条件数组。
代码如下(可能比较繁冗)
a=zeros(180,1);
cuecolor=zeros(180,3);
discolor1=zeros(180,3);
discolor2=zeros(180,3);
for i=1:180
a(i)=randperm(360,1);
cuecolor(i,:)=color_seq(a(i),:);
if randIndexList1(i:2)==1
if randIndexList1(i:3)==1
discolor1(i,:)=cuecolor(i,:);
discolor2(i,:)=cuecolor(i,:);
elseif randIndexList1(i:3)==2
if a(i)<4
discolor1(i,:)=color_seq(a(i)-3+359,:);
discolor2(i,:)=color_seq(a(i)+3,:);
else
discolor1(i,:)=color_seq(a(i)-3,:);
discolor2(i,:)=color_seq(a(i)+3,:);
end
elseif randIndexList1(i:3)==3
if a(i)<6
discolor1(i,:)=color_seq(a(i)-5+359,:);
discolor2(i,:)=color_seq(a(i)+5,:);
else
discolor1(i,:)=color_seq(a(i)-5,:);
discolor2(i,:)=color_seq(a(i)+5,:);
end
elseif randIndexList1(i:3)==4
if a(i)<7
discolor1(i,:)=color_seq(a(i)-6+359,:);
discolor2(i,:)=color_seq(a(i)+6,:);
else
discolor1(i,:)=color_seq(a(i)-6,:);
discolor2(i,:)=color_seq(a(i)+6,:);
end
elseif randIndexList1(i:3)==5
if a(i)<8
discolor1(i,:)=color_seq(a(i)-7+359,:);
discolor2(i,:)=color_seq(a(i)+7,:);
else
discolor1(i,:)=color_seq(a(i)-7,:);
discolor2(i,:)=color_seq(a(i)+7,:);
end
else
if a(i)<10
discolor1(i,:)=color_seq(a(i)-9+359,:);
discolor2(i,:)=color_seq(a(i)+9,:);
else
discolor1(i,:)=color_seq(a(i)-9,:);
discolor2(i,:)=color_seq(a(i)+9,:);
end
end
elseif randIndexList1(i:2)==2
if randIndexList1(i:3)==1
discolor1(i,:)=cuecolor(i,:);
discolor2(i,:)=cuecolor(i,:);
elseif randIndexList1(i:3)==2
if a(i)<9
discolor1(i,:)=color_seq(a(i)-8+359,:);
discolor2(i,:)=color_seq(a(i)-13+359,:);
elseif 9<a(i) &&a(i)<14
discolor1(i,:)=color_seq(a(i)-8,:);
discolor2(i,:)=color_seq(a(i)-13+359,:);
else
discolor1(i,:)=color_seq(a(i)-8,:);
discolor2(i,:)=color_seq(a(i)-13,:);
end
elseif randIndexList1(i:3)==3
if a(i)<9
discolor1(i,:)=color_seq(a(i)-8+359,:);
discolor2(i,:)=color_seq(a(i)-13+359,:);
elseif 9<a(i) &&a(i)<18
discolor1(i,:)=color_seq(a(i)-8,:);
discolor2(i,:)=color_seq(a(i)-17+359,:);
else
discolor1(i,:)=color_seq(a(i)-8,:);
discolor2(i,:)=color_seq(a(i)-17,:);
end
elseif randIndexList1(i:3)==4
if a(i)<9
discolor1(i,:)=color_seq(a(i)-8+359,:);
discolor2(i,:)=color_seq(a(i)-19+359,:);
elseif 9<a(i) &&a(i)<20
discolor1(i,:)=color_seq(a(i)-8,:);
discolor2(i,:)=color_seq(a(i)-19+359,:);
else
discolor1(i,:)=color_seq(a(i)-8,:);
discolor2(i,:)=color_seq(a(i)-19,:);
end
elseif randIndexList1(i:3)==5
if a(i)<9
discolor1(i,:)=color_seq(a(i)-8+359,:);
discolor2(i,:)=color_seq(a(i)-21+359,:);
elseif 9<a(i) && a(i)<22
discolor1(i,:)=color_seq(a(i)-8,:);
discolor2(i,:)=color_seq(a(i)-21+359,:);
else
discolor1(i,:)=color_seq(a(i)-8,:);
discdolor2(i,:)=color_seq(a(i)-21,:);
end
else
if a(i)<9
discolor1(i,:)=color_seq(a(i)-8+359,:);
discolor2(i,:)=color_seq(a(i)-25+359,:);
elseif 9<a(i) &&a(i)<26
discolor1(i,:)=color_seq(a(i)-8,:);
discolor2(i,:)=color_seq(a(i)-25+359,:);
else
discolor1(i,:)=color_seq(a(i)-8,:);
discolor2(i,:)=color_seq(a(i)-25,:);
end
end
end
end
randIndexList1未定义
我好像已经搞明白了为什么了,是因为我打代码的格式不太正确,如(i,:)我错打成了(i:0)。然后第一个条件下我没有考虑到当a抽取成360(之类)的时候,discolor2想取的a+数字会超过范围而报错