117301田志阳java3.docx
《117301田志阳java3.docx》由会员分享,可在线阅读,更多相关《117301田志阳java3.docx(15页珍藏版)》请在冰豆网上搜索。
117301田志阳java3
湖北文理学院
《Java高级编程技术》
实验报告
专业班级:
软工1512
姓名:
田志阳
学号:
2015117301
任课教师:
王新颖
2017年10月20日
实验3集合框架(2学时)
一、实验目的与要求
通过实验使得学生掌握Java集合框架的使用。
二、预习与准备
掌握基本的概念及原理,明确实验任务和目的,准备实验的源代码。
三、实验内容
(1)编写一个程序来跟踪一个map,这个map的keys和values都是字符串—学生的名称和他们的课程分数.提示程序用户添加或移除students,修改分数,或者打印所有的分数.打印输出应当按照名字排序并按照如下格式进行输出:
Carl:
B+
Joe:
C
Sarah:
A
(2)重新实现上面一个题目以便使得map的keys为Student类的对象.一个student应当有一个firstname,一个lastname和一个唯一的ID(integer类型).Forgradechangesandremovals,lookupshouldbebyID.打印输出应当按照lastname进行排序.如果两个students有相同的lastname,那么使用firstname作为一个区分.如果firstnames也相同,那么就使用ID.
提示:
使用两个map.
MapgradeMap=newTreeMap();
MapidToStudentMap=newTreeMap();
(3)有一个机场只有一条跑道。
当它繁忙时,需要起飞和降落的飞机不得不等待。
实现一个模拟仿真类(类名为RunwaySimulator),使用两个队列,分别用于等待起飞和降落的飞机。
降落的飞机具有优先权。
用户输入takeoff(起飞)flightSymbol(航班号),land(降落)flightSymbol(航班号),next和quit命令。
前两个命令(takeoff和land)将飞机放入合适的队列中。
next命令完成当前的起飞或降落并使能下一个,并打印(takeoff或land)动作以及航班号。
(4)假设你以每股12美元的价格买入某一种股票的100股(share),然后以每股10美元的价格买入另外100股(同一种股票),并且以15美元一股卖出15股。
你需要为你的获利交税。
在美国,FIFO规则规定:
你首先卖掉第1批的所有股获利300美元,然后卖掉第2批的50股获利250美元,总共获利550美元。
写一个程序能够对一个公司股票的任意买入和卖出进行获利计算.用户输入命令buyquantityprice,sellquantity(whichcausesthegaintobedisplayed),和quit.
提示:
使用一个队列,队列中的每一个元素是一个StockBlock类的对象,StockBlock对象包含大宗股票的价格和数量.
(5)考虑一个问题,给定一个起点从一个网络中找到该起点到所有其它城市的一条最便宜的路线。
例如,在上图的网络中,从Pendleton到Peoria的最便宜路线的花费是8(经过Pierre和Pueblo)。
下面的helper类表示到另一个城市的距离:
publicclassDistanceToimplementsComparable{
privateStringtarget;
privateintdistance;
publicDistanceTo(Stringcity,intdist){
target=city;
distance=dist;
}
publicStringgetTarget(){returntarget;}
publicintgetDistance(){returndistance;}
publicintcompareTo(DistanceToother){
returndistance-other.distance;
}
}
城市间的所有有向连接存储在Map>中.
算法如下所示:
设from为起点.
添加DistanceTo(from,0)到一个优先队列(priorityqueue)中.
构造一个从城市名到距离的map,命名为shortestKnownDistance.
While优先级队列不为空
得到它的一个最小元素.
如果它的target不是shortestKnownDistance中的key
让d表示到target的距离.
将(target,d)放入到shortestKnownDistance中.
Forallcitiescthathaveadirectconnectionfromtarget(for循环)
添加DistanceTo(c,d+从target到c的距离)到优先级队列中(priorityqueue).
当算法执行完成后,shortestKnownDistance包含从起点到所有可达target的最短距离。
你的任务是编写一个程序实现这个算法。
你的程序应该读取city1city2distance形式的行。
起点(Startingpoint)是第一行的第一个城市。
打印它到所有城市的最短距离。
四、实验过程
1代码
packagecore112;
importjava.util.Iterator;
importjava.util.Map;
importjava.util.Scanner;
importjava.util.Set;
importjava.util.TreeMap;
publicclassStudent{
publicstaticvoidprintf(Mapstudents){
SetkeySet=students.keySet();
Iteratoriter=keySet.iterator();
while(iter.hasNext()){
Stringkey=iter.next();
System.out.println(key+":
"+students.get(key));
}
}
publicstaticvoidmain(String[]args){
Mapstudents=newTreeMap();
Scannerout=newScanner(System.in);
StringstudentName;
Stringgrade;
//students.put(studentName,grade);
students.put("Carl","B+");
students.put("Sarah","A");
students.put("Joe","C");
printf(students);
System.out.println("添加学生信息:
输入姓名,成绩");
studentName=out.nextLine();
grade=out.nextLine();
students.put(studentName,grade);
printf(students);
System.out.println("\n根据姓名移除学生信息:
输入姓名");
studentName=out.nextLine();
students.remove(studentName);
printf(students);
System.out.println("\n根据姓名修改学生分数:
输入姓名");
studentName=out.nextLine();
if(students.containsKey(studentName)){
System.out.println("成绩:
");
grade=out.nextLine();
students.put(studentName,grade);
}else{
System.out.println("该学生不存在!
");
}
printf(students);
}
}
2代码
packagecontent_2;
publicclassStudent{
privateStringFirstName;
privateStringLastName;
publicStudent(StringfirstName,StringlastName){
super();
FirstName=firstName;
LastName=lastName;
}
publicStringgetFirstName(){
returnFirstName;
}
publicvoidsetFirstName(StringfirstName){
FirstName=firstName;
}
publicStringgetLastName(){
returnLastName;
}
publicvoidsetLastName(StringlastName){
LastName=lastName;
}
@Override
publicStringtoString(){
return"Student[FirstName="+FirstName+",LastName="+LastName+"]";
}
}
packagecore112;
importjava.util.LinkedList;
importjava.util.Queue;
importjava.util.Scanner;
publicclassStock{
publicstaticvoidmain(String[]args){
Queuequeue=newLinkedList();
Accountaccount=newAccount();
Scannerout=newScanner(System.in);
floatprice;
intnum;
System.out.println("开始前账户余额:
"+account.getBalance());
while(true){
System.out.println("当前购买的股票:
");
System.out.println(queue);
System.out.println("请输入购买股票的数量和价格");
num=out.nextInt();
price=out.nextFloat();
if(account.getBalance()-(price*num)>=0){
System.out.print("购买成功!
");
queue.add(newStockBlock(price,num));
System.out.println("此次金额变化:
"+"-"+price*num+"余额剩余:
"+account.getBalance());
}else{
System.out.print("购买失败余额不足");
}
System.out.println("当前购买的股票:
");
System.out.println(queue);
System.out.println("请输入卖出股票的数量和价格");
num=out.nextInt();
price=out.nextFloat();
if(queue.peek().getNum()>=num){
System.out.print("卖出成功!
");
StockBlockstockBlock=queue.peek();
stockBlock.setNum(stockBlock.getNum()-num);
account.setBalance(account.getBalance()+price*num);
System.out.print("此次金额变化:
"+"+"+price*num+"余额剩余:
"+account.getBalance());
}else{
System.out.print("卖出失败数量不足");
}
}
}
}
3代码
packagecore112;
importjava.util.LinkedList;
importjava.util.Queue;
importjava.util.Scanner;
publicclassRunwaySimulator{
publicstaticvoidmain(String[]args){
QueuetakeoffWait=newLinkedList();
QueuelandWait=newLinkedList();
Scannerout=newScanner(System.in);
Stringoperation;//操作
StringflightSymbol;//航班号
Stringflag;//等待或者进行
while(true){
System.out.println("-----起飞队列"+takeoffWait);
System.out.println("-----下降队列"+landWait);
System.out.println("请输入操作例:
takeoff(起飞),land(降落)");
operation=out.nextLine();
System.out.println("请输入航班号:
");
flightSymbol=out.nextLine();
System.out.println("请输入next和quit命令:
");
flag=out.nextLine();
if(operation.equals("takeoff")){
if(flag.equals("quit")){
if(!
takeoffWait.contains(flightSymbol)){
System.out.println("进入起飞等待区!
");
takeoffWait.add(flightSymbol);
}else{
System.out.println("继续等待起飞!
");
}
}
elseif(flag.equals("next")){
if(landWait.size()!
=0){
if(!
takeoffWait.contains(flightSymbol)){
System.out.println("有等待降落的航班,请进入起飞等待区稍后起飞!
");
takeoffWait.add(flightSymbol);
}else{
System.out.println("有等待降落的航班,继续等待起飞!
");
}
}else{
if(takeoffWait.size()==0){
System.out.println("开始起飞!
");
}else{
if(!
takeoffWait.contains(flightSymbol)){
System.out.println("前面有等待起飞的航班,请进入等待区排队稍后起飞!
");
takeoffWait.add(flightSymbol);
}else{
if(takeoffWait.peek().equals(flightSymbol)){
System.out.println("开始起飞!
");
takeoffWait.poll();
}else{
System.out.println("前面有等待起飞的航班,请继续等待!
");
}
}
}
}
}
}
elseif(operation.equals("land")){
if(flag.equals("quit")){
if(!
landWait.contains(flightSymbol)){
System.out.println("进入等待降落区,等待降落!
");
landWait.add(flightSymbol);
}else{
System.out.println("继续等待降落!
");
}
}
elseif(flag.equals("next")){
if(landWait.size()==0){
System.out.println("开始降落!
");
}else{
if(!
landWait.contains(flightSymbol)){
System.out.println("前面有等待降落的飞机,请进入等待区等待稍后降落!
");
landWait.add(flightSymbol);
}else{
if(landWait.peek().equals(flightSymbol)){
System.out.println("开始降落!
");
landWait.poll();
}else{
System.out.println("前面有等待降落的航班,请继续等待!
");
}
}
}
}
}
}
}
}
4代码
packagecore112;
publicclassAccount{
privatedoubleBalance=20000;
publicdoublegetBalance(){
returnBalance;
}
publicvoidsetBalance(doublebalance){
Balance=balance;
}
}
packagecore112;
publicclassStockBlock{
privatefloatprice;
privateintnum;
publicfloatgetPrice(){
returnprice;
}
publicvoidsetPrice(floatprice){
this.price=price;
}
publicintgetNum(){
returnnum;
}
publicvoidsetNum(intnum){
this.num=num;
}
publicStockBlock(floatprice,intnum){
super();
this.price=price;
this.num=num;
}
@Override
publicStringtoString(){
return"StockBlock[price="+price+",num="+num+"]";
}
}
packagecore112;
importjava.util.LinkedList;
importjava.util.Queue;
importjava.util.Scanner;
publicclassStock{
publicstaticvoidmain(String[]args){
Queuequeue=newLinkedList();
Accountaccount=newAccount();
Scannerout=newScanner(System.in);
floatprice;
intnum;
System.out.println("开始前账户余额:
"+account.getBalance());
while(true){
System.out.println("当前购买的股票:
");
System.out.println(queue);
System.out.println("请输入购买股票的数量和价格");
num=out.nextInt();
price=out.nextFloat();
if(account.getBalance()-(price*num)>=0){
System.out.print("购买成功!
");
queue.add(newStockBlock(price,num));
System.out.println("此次金额变