GET PUT msg1 10 5 PUT msg2 10 4 GET GET GET
EMPTY QUEUE! msg2 10 msg1 10 EMPTY QUEUE!
代码实现:
/*
* 解题思路:首先申明题目很水啊。感觉自己没用优先队列哦,只用了队列而已。我的思想是这样的,根据题目要求是最先考虑信息的优先级,然后如果有相同优先级的信息的话,就把最先
*进来的 消息输出去。在我看来,利用一个ArrayList做队列,先把输入需要输入的消息,参数和优先级用对象message封装了放到list中,然后在弹出消息的时候只要从最开始找到那个优先级
*最小的消息找到,并记录好,然而这个消息就是满足条件的消息了,把他从list中弹出。
*/
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
List<message> list=new ArrayList<message>();//利用ArrayList做队列
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String str = sc.nextLine(); //接收命令
String[] strs=str.split(" "); //根据给的案例,可以用空格分隔命令(str[0],str[1],str[2],str[3]分别对应处理命令,消息,参数,优先级)
//如果是PUT则把对应数据封装好加入list中
if(strs[0].equals("PUT")){
list.add(new message(strs[1],strs[2],strs[3]));
}else{
//如果list为空,则输出EMPTY QUEUE!
if(list.size()==0){
System.out.println("EMPTY QUEUE!");
}else{
int outIndex=-1; //用来存放需要输出的消息在list中的位置
int Priority=Integer.MAX_VALUE; //用来存储优先级,初始化最大
//遍历list,知道到最早的那个并且优先级最高的消息的在list中的位置
for(int i=0;i<list.size();i++){
if(Priority>Integer.parseInt(list.get(i).getPriority())){
Priority=Integer.parseInt(list.get(i).getPriority());
outIndex=i;
}
}
//输出
System.out.println(list.remove(outIndex).toString());
}
}
}
}
}
//用来封装消息信息的类message
class message{
private String msg=null; //消息
private String num=null; //参数
private String Priority=null; //优先级
//构造函数
public message(String msg, String num, String priority) {
this.msg = msg;
this.num = num;
Priority = priority;
}
//获取优先级
public String getPriority() {
return Priority;
}
//toString方法
@Override
public String toString() {
return msg + " " + num;
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/xionghui2013/article/details/47793701