合并两个String数组时第二个数组元素始终为null的问题排查
数组合并后出现null值的问题分析
问题根源
你的代码里第二个循环存在两个致命问题:
- 循环条件错误:
第二个循环的条件是i < n2,这里n1=2、n2=2,循环起始值i=n1=2,此时2 < 2不成立,导致这个循环完全没有执行,array3的后两个位置始终是String数组默认的null值。 - 索引变量j的错误定义:
就算循环条件改对了,你把int j=0;写在了循环体内部,每次循环都会重置j为0,最终只会把array2[0]重复赋值,无法遍历array2的所有元素。
修正后的代码
方式一:修正循环逻辑
public class Q4 { public static void main(String[] args){ String array1[] = new String[]{"Ahmad", "Adam"}; String array2[] = new String[]{"Mick", "Ali"}; int n1 = array1.length; int n2 = array2.length; String []array3 = new String[n1+n2]; // 复制第一个数组 for(int i = 0; i < n1; i++) array3[i] = array1[i]; // 修正第二个循环:循环条件改为i < n1+n2,j在循环外初始化 int j = 0; for(int i = n1; i < n1 + n2; i++) { array3[i] = array2[j++]; } // 输出结果 for(int i = 0; i<array3.length; i++) System.out.print(array3[i] + " "); } }
方式二:更简洁的索引映射
不需要额外的j变量,直接用i - n1作为array2的索引:
public class Q4 { public static void main(String[] args){ String array1[] = new String[]{"Ahmad", "Adam"}; String array2[] = new String[]{"Mick", "Ali"}; int n1 = array1.length; int n2 = array2.length; String []array3 = new String[n1+n2]; for(int i = 0; i < n1; i++) array3[i] = array1[i]; // 直接用i - n1获取array2的对应索引 for(int i = n1; i < n1 + n2; i++) { array3[i] = array2[i - n1]; } for(int i = 0; i<array3.length; i++) System.out.print(array3[i] + " "); } }
输出结果
修正后运行代码,会得到预期输出:
Ahmad Adam Mick Ali
内容的提问来源于stack exchange,提问作者Miriam
相关产品推荐
相关产品推荐

