You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:22:43