Matlab合并数组后随机选取元素出现部分缺失,求原因及解决方法
问题分析与修复方案
你的代码存在两个核心问题,直接导致了元素缺失或显示异常:
1. 数字转字符串时混入多余空格
num2str(0:9) 会生成带空格分隔的字符串 "0 1 2 3 4 5 6 7 8 9",这使得合并后的merged数组里混入了9个空格字符,原本10个数字变成了19个元素(10个数字+9个空格),随机选取时大概率会选到空格,看起来就像"元素缺失"。
2. 结果数组初始化错误
pw=char([1,5]) 生成的是长度为2的不可见控制字符数组(对应ASCII码1和5),后续循环给pw(3)到pw(5)赋值时,Matlab会自动扩展数组,但初始的不可见字符会干扰最终显示效果。
修复后的代码
Number_set = 0:9; alpha_set = 'a':'z'; % 逐个将数字转为对应字符,避免空格 Number_setc = char(Number_set + 48); % ASCII码48对应字符'0' merged = [alpha_set, Number_setc]; % 直接拼接字符数组更高效 % 初始化长度为5的字符数组,用空字符填充 pw = char(zeros(1,5)); for i=1:5 ind = randi(length(merged)); pw(i) = merged(ind); end disp(pw)
更简洁的写法(可选)
Matlab内置了更高效的随机采样函数,可直接实现需求:
Number_set = char(0:9 + 48); alpha_set = 'a':'z'; merged = [alpha_set, Number_set]; % 允许重复采样 pw = merged(randi(length(merged),1,5)); % 如果需要不重复采样,用下面这行替换上面的 % pw = merged(randperm(length(merged),5)); disp(pw)
内容的提问来源于stack exchange,提问作者jacky
相关产品推荐
相关产品推荐

