Java中如何将String数组传入InQueue类实例存入内部Queue队列
问题原因
- 你的
InQueue构造方法仅完成了静态队列q的初始化,没有将传入的input数组元素添加到队列中,传入的参数完全没有被使用 - 负责填充队列元素的
newInputQueue方法没有被调用,队列初始化后始终为空 - 额外风险提示:将队列
q定义为静态变量会导致所有InQueue实例共用同一个队列,每次创建新实例都会重新初始化队列覆盖之前的内容,若不需要全局共用队列建议去掉static修饰符
修复方案
方案1:不修改原有类代码,仅调整调用逻辑
你可以在创建实例后手动调用静态填充方法,代码如下:
public static void main(String[] args) { String[] inputArr = {"id", "+", "id", "*", "id"}; // 初始化静态队列q new InQueue(inputArr); // 调用静态方法填充数组元素到队列 Queue<String> filledQueue = InQueue.newInputQueue(inputArr); // 测试输出:[id, +, id, *, id, $] System.out.println(filledQueue); }
方案2:优化类设计,简化调用逻辑
直接在构造方法中完成元素填充,不需要额外调用其他方法,优化后的InQueue代码如下:
import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; public class InQueue { // 去掉static,每个实例对应独立队列,避免全局共用的冲突问题 private Queue<String> q = null; public InQueue(String[] input){ q = new LinkedList<>(); // 构造方法内直接完成元素填充和结束符添加 q.addAll(Arrays.asList(input)); q.add("$"); } // 提供队列获取方法 public Queue<String> getQueue() { return q; } }
对应的调用代码:
public static void main(String[] args) { String[] inputArr = {"id", "+", "id", "*", "id"}; InQueue inQueue = new InQueue(inputArr); Queue<String> filledQueue = inQueue.getQueue(); // 测试输出:[id, +, id, *, id, $] System.out.println(filledQueue); }
内容的提问来源于stack exchange,提问作者ANewProgrammer
相关产品推荐
相关产品推荐

