无法从队列中删除并添加到另一个队列

时间:2015-09-29 21:53:13

标签: java queue

我有一个包含许多字符串和整数的输入文件。

离。

blat 40

你好10

asdf 20

等...

我已将它们读入队列以保存它们。我需要将它们从队列中取出,并在int i等于我的数据文件中的int时将其添加到优先级队列中。

这是我到目前为止所拥有的......

for(int i = 0; i<=50; i++)
{
    Object x = normalQueue.Dequeue();  //this makes x equal the line of the data file dequeued.
    if(i == x.secondint) //secondint is the Objects method that gets the integer in the data file
    {
        PQueue.Insert(x); //Inserts x to PQueue if i = the second int in the data file
    }
    else
    {
        normalQueue.Enqueue(x); //adds x back to queue1
        normalQueue.SwitchEnds(); //Swaps the 1st and last node
    }
}

我遇到的问题是它只打印出数据文件的2个文件。

1 个答案:

答案 0 :(得分:0)

我不太确定在运行代码时你打算发生什么,但会发生什么:

给出以下输入:

blah 40
hello 10
asdf 20

(我假设您在从文件读取时向队列后面添加元素,因此将保留数据文件的顺序)

在循环的前40次迭代中,您从"blah 40"中取出Queue1,将"blah 40"添加回Queue1,然后将"blah 40""asdf 20"交换"hello 10""blah 40"(取决于您经历了多少次迭代),以便Queue1再次位于i的开头。

在循环的第41次迭代中,"blah 40"将为40,并将Queue2插入Queue1

在迭代42中,直到你的循环的最后一次迭代,除了在i周围移动之外没有真正完成任务,因为"blah 40"在移除Queue1之前不是10或20,所以在循环结束"hello 10"包含"asdf 20"Queue2,而"blah 40"包含Queue2

我意识到这个演练可能有点令人困惑,但是在每次迭代之后尝试打印出两个队列的内容,它应该变得更加清晰。

修改 听起来像你想要实现的是你的第二个整数(即40,10和20)的优先顺序,这样当你遍历"hello 10" "asdf 20" "blah 40" 并删除一个和一个元素时,它们会像这样打印出来:

Queue1

(或相反)。 如果是这种情况,那么根本不需要new Comparator<YourCustomObject>() { @Override public int compare(YourCustomObject o1, YourCustomObject o2) { return Integer.compare(o1.secondint, o2.secondint); } } ,您只需要确保为优先级队列提供自定义比较器,以便在第二个int上对对象进行排序。 (或者,您可以在自定义对象中实现类似的界面。)

示例比较器:

asyncio