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

ちょっとした注意点として、 andを Matlab の変数として使用しないことijをお勧めします。

于 2013-02-25T09:53:12.763 に答える