如何用另一数组的前k个元素重复填充至长度为n的数组?
实现用数组前k个元素重复填充生成指定长度数组的Java函数
我来帮你补全这个fill函数,实现用原数组的前k个元素循环重复,生成一个长度为n的新数组。先看完整的实现代码,再一步步解释关键点:
import java.util.Arrays; class Repeat_block { public static void main(String[] args) { int k = 3; int n = 10; int arr[] = { 1, 2, 3, 5, 9, 12, -2, -1 }; System.out.println(Arrays.toString(fill(arr, k, n))); } public static int[] fill(int[] arr, int k, int n) { // 边界条件:数组为空、k为0或n<=0时返回null if (arr == null || k == 0 || n <= 0) { return null; } // 处理k超过原数组长度的情况,避免数组越界 k = Math.min(k, arr.length); int arr2[] = new int[n]; // 循环填充目标数组 for (int i = 0; i < n; i++) { // 取模运算实现前k个元素的循环复用 arr2[i] = arr[i % k]; } return arr2; } }
代码关键点解释:
- 边界条件优化:除了你原本判断的
k == 0 || n <= 0,我补充了arr == null的判断(避免传入空数组导致后续报错);同时处理了k > arr.length的情况——如果k比原数组长度大,就取整个数组的元素来重复填充,防止出现数组越界异常。 - 循环填充逻辑:利用
i % k的取模运算,让索引在0到k-1之间循环切换,不管n是多大,都能持续复用原数组的前k个元素。比如当i=3时,3%3=0,就会取原数组的第0个元素,完美实现循环重复的效果。 - 测试结果:用你给出的测试用例运行代码,会输出
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1],完全符合预期。
内容的提问来源于stack exchange,提问作者Ramakanta Bisipa
相关产品推荐
相关产品推荐

