【问题标题】:How can I create method to generate new LinkedList?如何创建方法来生成新的 LinkedList?
【发布时间】:2019-10-30 23:16:10
【问题描述】:

我正在尝试创建一种方法来创建新的LinkedLists。我想传递一个String 参数以用作新的LinkedList 标识符,但我收到一个错误“java: variable s is already defined in method createQueue(java.lang.String)

有没有办法像这样使用String 来创建新的LinkedList? 我需要以这种方式进行分配,因此我无法更改方法声明。

public void createQueue(String s){

   LinkedList<obj> s = new LinkedList<obj>();

}

我也可能以错误的方式看待这个问题。我只是想创建linkedList atm。但我的要求如下:

布尔添加队列(字符串)

此方法将有一个字符串参数。它将返回一个布尔值。 它将添加一个由参数指定的新队列。例如。 addQueue(“ready”) 将在队列列表中创建一个名为“ready”的新队列。如果已经有指定名称的队列,则此方法将返回 false。例如。如果您已经有一个名为“ready”的队列并调用 addQueue(“ready”),它将返回 false。否则,它将创建队列并返回 true。

【问题讨论】:

  • "它将添加一个由参数指定的新队列"。在哪里添加?
  • 没有这方面的规范,但我正在创建一个包含队列的列表。它只需要能够容纳 1-n 的任意数量的队列。
  • 那么你正在编写一个需要保存队列列表的类,并且这个方法应该将队列添加到列表中?
  • 是的。队列还将保存来自另一个自定义类的对象,因此有一个 AddPcb(Pcb p, String s) 方法将 Pcb 对象添加到具有匹配名称的队列中。
  • 那么将String转换为LinkedList的过程究竟应该是什么?字符串包含什么?

标签: java methods linked-list identifier


【解决方案1】:

您必须维护一组队列。因为每个队列都有唯一的名字,所以最合适的集合是Map

public class QueueManager {

    private Map<String, List<Pcb>> queues = new HashMap<String, List<Pcb>>();

    public boolean addQueue(String queueName) {
        if (queues.containsKey(queueName)) {
            // There is already a queue with that name
            return false;
        } else {
            queues.put(queueName, new ArrayList<Pcb>());
            return true;
        }
    }
}

这里我假设队列是用ArrayList 实现的,但当然LinkedList 会类似地工作。那么addPcb()这个方法就很明显了:

public void addPcb(Pcb pcb, String queueName) {
    List<Pcb> queue = queues.get(queueName);
    if (queue != null) {
        queue.add(pcb);
    } else {
        throw new IllegalArgumentException("Queue does not exist: " + queueName);
    }
}

addPcb() 的替代实现,使用addQueue()可以是:

public void addPcb(Pcb pcb, String queueName) {
    addQueue(queueName);
    List<Pcb> queue = queues.get(queueName);
    queue.add(pcb);
}

【讨论】:

    【解决方案2】:

    问题是您有两个名为 s 的不同变量 - String s 参数(它是一个变量)和 LinkedList&lt;obj&gt; s

    只需重命名其中一个。

    【讨论】:

    • 但是我需要使用String's'来命名新的LinkedList,我该怎么做呢?
    • @ChrisMoore 你不能。您不能在同一范围内拥有两个具有相同名称的变量。为什么不将String s 重命名为String someOtherNameWhichIsNotS
    • 感谢您的回复。也许我在想什么被问错了。你介意看看我的要求吗? boolean addQueue(String) 此方法将有一个 String 参数。它将返回一个布尔值。它将添加一个由参数指定的新队列。例如。 addQueue(“ready”) 将在队列列表中创建一个名为“ready”的新队列。如果已经有指定名称的队列,则此方法将返回 false。例如。如果您已经有一个名为“ready”的队列并调用 addQueue(“ready”),它将返回 false。否则它将创建队列并返回 true。
    • 当然。编辑问题以指定您要执行的操作。
    • 我已在问题中添加信息
    猜你喜欢
    • 2020-02-10
    • 2011-01-22
    • 2022-06-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 2017-02-24
    • 2013-04-06
    • 1970-01-01
    相关资源
    最近更新 更多