Java多测试用例数组轮转:无法动态命名数组的实现方案
问题核心原因
Java 是静态强类型编译语言,所有变量标识符必须在编译阶段明确固定,完全不支持运行时通过字符串拼接生成合法变量名。
你写的报错代码本身在语法层面就不合法:声明变量时的array+j是对一个不存在的变量array和循环变量j做加法运算,Java根本不会把这段代码解析成你想要的“拼接出array1、array2作为变量名”的逻辑,从编译第一步就会判定为非法语法,直接触发编译报错。
适配需求的实现方案
你不需要靠动态拼接变量名实现多测试用例的独立数组存储,两类常用结构完全可以覆盖需求:
方案1:集合嵌套存储(最简洁高效)
用外层集合作为容器,每个位置对应存储一个测试用例的独立数组对象,靠索引精准访问,完全不需要给对象起动态名字:
// test 为输入的测试用例总数量T int test = T; // 外层List的每个元素,对应一个测试用例的独立数组 ArrayList<ArrayList<Integer>> allCaseArrays = new ArrayList<>(); for(int j = 0; j < test; j++){ // 每次循环生成全新的独立数组对象,和其他测试用例的数组完全隔离 ArrayList<Integer> currentArray = new ArrayList<>(); // 在此处填充当前测试用例的N个输入元素 allCaseArrays.add(currentArray); } // 后续需要访问第j个测试用例的数组,直接通过allCaseArrays.get(j)获取即可
对应你的数组轮转题目,拿到每个子数组后,先对K做取模优化(K = K % N,避免K大于N时的无效轮转),再按下述逻辑遍历输出:
// arr 为当前测试用例的数组,N为数组长度,K为轮转步数 for(int i=0; i<N; i++){ int targetIdx = (N - K + i) % N; System.out.print(arr.get(targetIdx) + " "); }
以上逻辑即可匹配样例输入的输出结果4 5 1 2 3。
方案2:键值对映射存储(需自定义命名场景适用)
如果你确实需要和你原本设想的“array1”、“array2”这类名称做关联存储,可以用HashMap结构,把原本打算当变量名的字符串作为键,对应的数组对象作为值存储:
HashMap<String, ArrayList<Integer>> namedArrays = new HashMap<>(); for(int j=1; j<=test; j++){ // 原本打算拼接生成变量名的字符串,直接作为Map的键 String arrayKey = "array" + j; namedArrays.put(arrayKey, new ArrayList<Integer>()); } // 后续获取对应数组时,直接通过键取值即可,比如namedArrays.get("array"+j)
内容的提问来源于stack exchange,提问作者Tirath Sharma
相关产品推荐
相关产品推荐

