我有一个包含许多字符串和整数的输入文件。
离。
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个文件。
答案 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