如何在Java中用单个循环打印两个不同长度但同类型的数组?
问题分析与解决方案
嘿,我来帮你排查这段代码的问题啦!
问题根源
你这段代码会抛出ArrayIndexOutOfBoundsException,原因很直观:
arr1的长度是5,循环条件i<arr1.length会让循环执行5次(i从0到4)- 但
arr2只有2个元素,有效索引仅为0和1,当i走到2时,访问arr2[i]就会超出它的索引范围,直接触发数组越界异常。
几种可行的修复方案
根据你的实际需求,有以下几种修复方式:
1. 只遍历两个数组中较短的长度
如果想对应输出两个数组相同索引位置的元素,只遍历到较短数组的末尾即可:
public static void main(String[] args) { int arr1[]= {1,2,3,4,5}; int arr2[]= {6,7}; // 取两个数组长度的最小值作为循环上限 for(int i=0;i<Math.min(arr1.length, arr2.length);i++) { System.out.println(arr1[i]); System.out.println(arr2[i]); } }
这段代码会输出1、6、2、7,之后就停止循环,完美避免越界问题。
2. 分别遍历两个数组
如果想把两个数组的所有元素都输出,分开循环是最稳妥的方式:
public static void main(String[] args) { int arr1[]= {1,2,3,4,5}; int arr2[]= {6,7}; // 先遍历arr1的所有元素 for(int i=0;i<arr1.length;i++) { System.out.println(arr1[i]); } // 再遍历arr2的所有元素 for(int i=0;i<arr2.length;i++) { System.out.println(arr2[i]); } }
这样会依次输出1、2、3、4、5、6、7,不会有任何异常。
3. 补全较短数组的默认值输出
如果希望对应位置输出,当较短数组元素用完时补默认值(比如0),可以加个简单判断:
public static void main(String[] args) { int arr1[]= {1,2,3,4,5}; int arr2[]= {6,7}; // 取较长数组的长度作为循环上限 for(int i=0;i<Math.max(arr1.length, arr2.length);i++) { // 输出arr1的元素,超出长度则补0 System.out.println(i < arr1.length ? arr1[i] : 0); // 输出arr2的元素,超出长度则补0 System.out.println(i < arr2.length ? arr2[i] : 0); } }
这段代码运行到i=2及之后时,arr2会输出0,直到循环跑完5次。
内容的提问来源于stack exchange,提问作者Kumar Gaurav
相关产品推荐
相关产品推荐

