You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:15:02