在没有临时列表、队列或其他数据结构的情况下更改队列的元素

Changing an element of Queue without a temporary list, queue or other data structure

做 Litvin Java 方法一书中的练习。一题要求创建一个实现了 Queue 接口的 LinkedList。

A Morse code message is represented in a program as a queue of strings. Each string consists of dots and dashes. Write and test a method that replaces each question mark (represented by "..--..") with a period (".-.-.-"), leaving all other codes unchanged. Do not use any temporary lists, queues, or other data structures.

由于LinkedList 实现了Queue,我无法使用ListIterator。我不确定如何更改队列中元素的值而不将它们放在临时位置。我将如何解决这个问题?

该问题可以使用一些代码来显示您当前的工作状态。 但没有更多信息:

  1. 根据 FIFO 设计,队列仅授予您访问第一个元素的权限。
  2. 您始终可以删除第一个元素并将其插入到后面。
  3. 如果您对队列中的所有元素执行此操作而不更改每个元素,则队列最终会处于与之前相同的状态。

因此,这将是仅使用队列接口的可能解决方案:

public void replaceQuestionmarks(Queue<String> input) {
  for(int i = 0; i<input.size(); input++) {
    String current = input.remove();
    input.add(questionMarkToPeriod(current));
}

“questionMarkToPeriod”将是一种条件替换方法。

编辑:忘记了 Queue 中的通用类型。

感谢@StephenC 和@tgdavies,我解决了这个问题。铸造 LinkedList 后,我​​能够使用 ListIterator 并从那里更新值

public static void replace(Queue<String> morseCode)
    {
        ListIterator<String> iter = ((LinkedList<String>)(morseCode)).listIterator();
        while(iter.hasNext())
        {
            if(iter.next() == "..--..")
            {
                iter.set(".-.-.-");
            }
            
        }
    }

以后会尽量让我的问题更容易理解。