一、题目

打印文件

示例:

题解:

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int times = Integer.valueOf(in.nextLine());Map<String, Printer> printerMap = new HashMap<>();for (int i = 0; i < times; i++) {String input = in.nextLine();String[] words = input.split(" ");if ("IN".equals(words[0])) {String printerId = words[1];int level = Integer.valueOf(words[2]);if (!printerMap.containsKey(printerId)) {printerMap.put(printerId, new Printer());}Printer printer = printerMap.get(printerId);printer.take(i + 1, level);}if ("OUT".equals(words[0])) {String printerId = words[1];Printer printer = printerMap.get(printerId);printer.output();}}}
}class Printer {List<Task> taskList = new LinkedList<>();public void take(int taskId, int level) {Task task = new Task(taskId, level);taskList.add(task);}public void output() {if (taskList.size() == 0) {System.out.println("NULL");return;}taskList.sort((a, b) -> {return b.getLevel() - a.getLevel();});System.out.println(taskList.get(0).getTaskId());taskList.remove(0);}
}class Task {private int taskId;private int level;public Task(int taskId, int level) {this.taskId = taskId;this.level = level;}public int getTaskId() {return taskId;}public int getLevel() {return level;}
}

二、总结

1 ACM模式

1.1 读完所有的示例再开始编码

不止一次,在写完代码进行验证的时候发现有特殊的情况没有考虑到。

读完所有的示例,把握所有可能的输入后再开始编码。

1.2 调试

ACM模式下编码时,要养成调试的习惯,可以将复杂的问题简单化。

1.3 控制台输入

Scanner in = new Scanner(System.in);
int i = in.nextInt();
String str = in.next();
String nextLine = in.nextLine();

需要注意一个问题,就是在 in.nextInt() 或 in.next() 之后,使用 in.nextLine() 得到的是当前行而不是下一行。

不注意的话,在循环处理所有行时,末尾的几行可能不会被处理,因为轮次已经用完了。

2 面向对象

写算法也可以面向对象。

2.1 对象排序

按照任务的优先级降序排列。

taskList.sort((a, b) -> {return b.getLevel() - a.getLevel();
});

显然 a.getLevel() - b.getLevel() 和 b.getLevel() - a.getLevel() 的结果互为相反数。

若 a.getLevel() < b.getLevel(),a.getLevel() - b.getLevel() < 0,意味着每两个做比较的对象,前面的小于后面的,所以是升序排列。

return b.getLevel() - a.getLevel() 为降序排列。

搞搞算法 2:面向对象相关推荐

  1. 【搞搞算法】多目标遗传算法NSGA-II的C语言代码使用手册

    这是2014年4月在其他博客写的,转帖到CSDN博客上. 在之前的博文里提到过,多目标遗传算法NSGA-II的提出者之一--Kalyanmoy Deb教授实验室的网站http://www.iitk.a ...

  2. Python 进阶 — 面向对象编程

    目录 文章目录 目录 面向对象思想 面向对象编程 面向对象编程的特性 封装 继承 多态 面向对象编程的优势 Python 的类属性与类方法 Python 类的实例化 Python 的对象属性与对象方法 ...

  3. python面向对象、向量化来实现神经网络和反向传播(三)

    现在,我们要根据前面的算法,实现一个基本的全连接神经网络,这并不需要太多代码.我们在这里依然采用面向对象设计. 理论知识参考:https://www.zybuluo.com/hanbingtao/no ...

  4. 【Python基础】07、Python类与面向对象

    一.面向对象编程(OOP) 程序=算法+数据结构=指令+数据 1.代码可以选择以指令为核心或以数据为核心进行编写 两种范型: 以指令为核心:围绕"正在发生什么"进行编写 面向过程编 ...

  5. java架构师进阶独孤九剑系列(一):数据结构与算法

    " 架构师进阶系列之独孤九剑,这套秘籍如果你能完整学会,年薪至少60万起,今天是架构师进阶连载开启篇. Java程序员成长为架构师进阶步骤 未来我会用1-2个月在实战为大家讲解架构师的九大必 ...

  6. 选第二大算法(锦标赛算法)

    算法描述 算法:FINDSECOND 输入:n个数的数组a[0...n-1] 输出:数组中的第二大的数second 算法思路 在选最大选最小算法中,我们将数组中的数两两分组进行比较,然后在较大的一组中 ...

  7. C++11时代的标准库快餐教程(4) - 排序算法的应用

    排序算法的应用 用排序做集合运算 - 子集,交集,并集与差集 上一节我们讲了排序算法,包括快速排序sort,堆排序partial_sort和归并排序stable_sort.并且讲了排序的第一个用法,二 ...

  8. 编程的逻辑-用面向对象方法实现复杂业务需求

    虽然不少同学一直在使用面向对象的语言进行项目开发,但是在分析.设计和编码过程中不一定用是真正的OOA/OOD/OOP的思想,贫血模型由于快速高效易上手,使用的项目不在少数,而随着软件规模和业务复杂度的 ...

  9. 软件测评师--第七小时 面向对象测试技术

    1.面向对象技术 对象和类 传统过程式编程语言:程序=算法+数据 面向对象编程语言:程度对象+消息 三大特性 继承 1.从一个类派生到另一个类 2.派生类(子类)继承了其父类和祖先类的数据成员和成员函 ...

最新文章

  1. 《学习OpenCV》第三章习题 第3题
  2. 华为荣耀畅玩7c计算机在那,华为荣耀畅玩7C
  3. Eclipse与MyEclipse的选择问题
  4. Codeforces Round #506 (Div. 3) 1029 F. Multicolored Markers
  5. 菜鸟教程终极篇之Microsoft Windows Pre-installation Environment (Windows PE) 2.0
  6. 二进制信号量,互斥信号和计数信号量的区别
  7. android动画设置的单位,Kotlin语言入门—实现单位转换,view设置,动画等
  8. S3C2440裸奔篇之MMU
  9. 美国红帽软件公司是做什么的
  10. Android抓包方法(一) 之Fiddler代理
  11. 智能建筑现状及发展趋势,建筑智能化的发展趋势
  12. 离散数学_构造推理的证明
  13. Python基础必掌握的Traceback回溯机制操作详解
  14. 淘宝滞销宝贝怎么处理?面对滞销宝贝怎么正确处理?
  15. docker学习 --Compose 容器编排,常用命令等.集成spring。mysql。redis
  16. 中国电信 合约协议   转载
  17. 观察力训练(福尔摩斯演绎法)
  18. 大型制造企业等级保护安全建设整改方案
  19. cadence allegro16.6 pcb文件转pads pcb文件方法教程
  20. Firewalld防火墙实例配置

热门文章

  1. 化学气相沉积CVD工艺中MKS下游排气高速节流阀的国产化替代方案及产品
  2. Kinect+OpenNI学习笔记之6(获取人体骨架并在Qt中显示)
  3. java获取 手机GPRS
  4. 从简历被拒到收割8个大厂offer,我用了3个月成功破茧成蝶
  5. 笑脸工具COORD批量转换2000大地到空间坐标
  6. hdu1181(dfs)变形记
  7. windows下测试人脸检测分类器在FDDB数据库的性能
  8. 文艺评论与文艺理论(当代文学、当代作家)
  9. PostKS(Posterior-Knowledge-Selection)模型代码运行经验
  10. NETTY框架的使用