0

我有来自用户输入的 6 个元素的向量编号。我想删除任何重复值并将其替换为另一个输入(不使用“唯一”或类似的)。

我试过:

myvec=zeros(1,6);
disp('Choose numbers from 1 to 55')
for i=1:6
    myvec(i)=input('');
    if (find(myvec(i)<1 | myvec(i)>55))
        disp('Enter new value')
        myvec(i)=input('');
    end
     if myvec(i+1)==myvec(i)
         myvec(i+1)==input('');
     end
end

问题是:

1) 下面的说法正确吗?

if myvec(i+1)==myvec(i)
         myvec(i+1)==input('');
       end

2) 运行时它超出范围,因为向量长度为​​ 6 并且我正在尝试访问 i+1 。我尝试从 2:7 开始使用 for 循环,但随后它在 myvec 向量中添加了零作为第一个元素。

谢谢!

4

1 回答 1

1

使用while循环怎么样?

myvec = NaN(1,6);
ii = 0;
disp('Choose numbers from 1 to 55');
while any( isnan(myvec) )
    tmp = input('');
    if tmp > 1 && tmp < 55 
       % proper input. check for duplicate
       if ( ii == 0 ) || ( ii > 0 && all( myvec(1:ii) ~= tmp ) )
           ii = ii+1;
           myvec(ii) = tmp;
       end
    end
end

一个小小的说明,在 Matlab中最好不要使用iandj作为变量。

于 2013-02-25T09:53:12.763 回答