行矩阵遍历调试:如何实现按元素总和次数打印Hello?
解决MATLAB循环打印次数不符的问题
首先得指出你原代码的问题:for i=1:a(1,1:size(a,2))这种写法在MATLAB里并不会按照你想的那样,把行矩阵的每个元素作为循环次数累加。实际上,当你给for循环的范围传入一个向量时,MATLAB只会取这个向量的第一个元素作为循环的上限,所以你的循环只执行了1次,自然只打印了1次Hello。
要实现总共打印6次Hello的需求,这里有两种简单的方法:
方法1:嵌套循环(最直观)
先遍历行矩阵a中的每一个元素,再针对每个元素的值执行对应次数的循环:
a = [1 2 3]; % 外层循环遍历a的每个元素,把当前元素赋值给num for num = a % 内层循环执行num次,每次打印i和Hello for j = 1:num disp(j); disp("Hello"); end end
外层循环会依次取1、2、3,内层循环分别执行1次、2次、3次,加起来正好6次,完全符合你的预期。
方法2:生成重复索引序列(更简洁)
用repelem函数生成一个重复的索引序列,让每个元素的重复次数等于它在a中的值,然后直接遍历这个序列:
a = [1 2 3]; % 生成序列:[1, 2, 2, 3, 3, 3],每个数字的重复次数对应a中的元素 repeat_indices = repelem(1:length(a), a); for i = repeat_indices disp(i); disp("Hello"); end
这种方法用一个循环就搞定了,repelem帮你把需要循环的次数提前展开成序列,遍历的时候自然就会执行6次。
如果你的需求里不需要打印i的值,甚至可以用更高效的向量化写法直接输出:
disp(repmat("Hello", sum(a), 1));
不过这个写法就省略了disp(i)的步骤,你可以根据实际需求选择。
内容的提问来源于stack exchange,提问作者Kushan Peiris
相关产品推荐
相关产品推荐

