Java中如何循环遍历函数传入的数组参数实现批量打印输出
问题描述
初始代码通过重复编写三次打印逻辑实现三个数组的输出,代码冗余度高:
public class Main { public static void main(String[] args) { // --------Declaring variables-------- int arrLength = 6; String[] arr1 = new String[arrLength]; String[] arr2 = new String[arrLength]; String[] arr3 = new String[arrLength]; joinArrays(arr1,arr2,arr3); } private static void joinArrays(String[] arr1, String[] arr2, String[] arr3){ System.out.print("Array 1 : "); System.out.println(String.join(",",arr1)); System.out.println(""); System.out.print("Array 2 : "); System.out.println(String.join(",",arr2)); System.out.println(""); System.out.print("Array 3 : "); System.out.println(String.join(",",arr3)); System.out.println(""); }
尝试用循环消除重复逻辑时写出了错误实现,运行后仅输出:
Array 1 : arr1 Array 2 : arr2
错误代码如下:
private static void joinArrays(String[] arr1, String[] arr2, String[] arr3){ for(int i = 0; i<3;i++){ System.out.print("Array "+i+" : "); System.out.println(String.join(",","arr"+i)); System.out.println(""); } }
该写法的核心问题是:Java作为静态语言,不支持通过拼接字符串的方式动态访问对应名称的变量,"arr"+i只是普通字符串,和传入的数组参数没有任何关联,因此无法获取到数组实际内容。
实现方案
方案1:可变参数(最优,扩展性最强)
直接将方法参数改为可变参数类型,支持传入任意个数的String数组,无需硬编码参数数量,循环遍历即可完成打印:
private static void joinArrays(String[]... arrs){ for(int i = 0; i < arrs.length; i++){ System.out.printf("Array %d : ", i + 1); System.out.println(String.join(",", arrs[i])); System.out.println(); } }
调用方式和原有逻辑完全一致,直接传入arr1,arr2,arr3即可,后续如果需要增加打印arr4、arr5,不需要修改方法内部逻辑。
方案2:保留原有固定参数签名
如果不需要修改方法的入参定义,可以先把所有传入的数组装到一个可遍历的二维数组中,再循环处理:
private static void joinArrays(String[] arr1, String[] arr2, String[] arr3){ String[][] allArrs = {arr1, arr2, arr3}; for(int i = 0; i < allArrs.length; i++){ System.out.printf("Array %d : ", i + 1); System.out.println(String.join(",", allArrs[i])); System.out.println(); } }
补充说明:当前代码中创建的String数组未做初始化赋值,数组元素默认值为
null,直接拼接会输出字面量null,如果需要展示为空内容,可以提前给数组元素赋值,或在拼接前对null值做转换处理。
内容的提问来源于stack exchange,提问作者Dark User
相关产品推荐
相关产品推荐

