MATLAB for循环条件语句调整:生成不含8的1000长度数字列表
解决MATLAB生成不含数字8的1000长度随机数列表问题
嘿,我来帮你搞定这个MATLAB的问题!你的原代码思路是对的,但核心问题在于固定循环1000次,遇到8的时候只是标记却依然把它存进了列表里,导致最终结果里还是有8,而且没有补生成新的数来凑够1000个有效数字。我给你两种靠谱的解决方案:
方法一:用while循环收集有效数字
这种方法逻辑最直观:先初始化一个空数组,然后不断生成随机数,只把不等于8的数加入数组,直到数组长度达到1000为止。
% 初始化空数组存储有效数字 storej = []; % 循环直到收集够1000个不含8的数字 while length(storej) < 1000 % 生成1到11的随机整数(如果想生成1-10,建议换成randi([1,10])) j = 1 + round(rand*10); % 只保留不等于8的数字 if j ~= 8 storej = [storej, j]; end end % 验证结果(可选) disp('最终列表长度:'); disp(length(storej)); % 输出应为1000 disp('列表中是否包含数字8:'); disp(any(storej == 8)); % 输出应为0(false)
方法二:用索引控制的循环(接近你的原代码逻辑)
如果你更想沿用原代码的“预分配数组”思路,可以用一个索引变量来控制,只有当生成的数字有效时,才填充数组并推进索引,否则重新生成数字:
% 预分配1000长度的数组,提升效率 storej = zeros(1, 1000); i = 1; % 循环直到填充完1000个有效数字 while i <= 1000 j = 1 + round(rand*10); % 同样,如需1-10替换为randi([1,10]) if j ~= 8 storej(i) = j; i = i + 1; % 只有有效数字才推进索引 end end
补充说明
原代码里的1+round(rand*10)会生成1到11的整数(因为rand生成0到1的数,rand*10最大接近10,round后可能得到10,加1就是11)。如果你的需求是生成1到10的随机整数,强烈建议用randi([1,10]),这个函数更简洁,也能避免意外生成11的情况。
内容的提问来源于stack exchange,提问作者user30609
相关产品推荐
相关产品推荐

