在没有临时列表、队列或其他数据结构的情况下更改队列的元素
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。我不确定如何更改队列中元素的值而不将它们放在临时位置。我将如何解决这个问题?
该问题可以使用一些代码来显示您当前的工作状态。
但没有更多信息:
- 根据 FIFO 设计,队列仅授予您访问第一个元素的权限。
- 您始终可以删除第一个元素并将其插入到后面。
- 如果您对队列中的所有元素执行此操作而不更改每个元素,则队列最终会处于与之前相同的状态。
因此,这将是仅使用队列接口的可能解决方案:
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(".-.-.-");
}
}
}
以后会尽量让我的问题更容易理解。
做 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。我不确定如何更改队列中元素的值而不将它们放在临时位置。我将如何解决这个问题?
该问题可以使用一些代码来显示您当前的工作状态。 但没有更多信息:
- 根据 FIFO 设计,队列仅授予您访问第一个元素的权限。
- 您始终可以删除第一个元素并将其插入到后面。
- 如果您对队列中的所有元素执行此操作而不更改每个元素,则队列最终会处于与之前相同的状态。
因此,这将是仅使用队列接口的可能解决方案:
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(".-.-.-");
}
}
}
以后会尽量让我的问题更容易理解。