一、实验内容
- 题目1
内容:使用容器类存储城市间的历程,并支持历程查询
下图为国内主要城市之间的公路里程:
你的程序要读入这样的一张表,然后,根据输入的两个城市的名称,给出这两个城市之间的里程。
注意:任何两个城市之间的里程都已经给出,不需要计算经第三地中转。
注意:你并不需要去录入上图的数据,数据是在程序输入中给的。
输入格式:
首先,你会读到若干个城市的名字。每个名字都只是一个英文单词,中间不含空格或其他符号。当读到名字为“###”(三个#号)时,表示城市名字输入结束,###并不是一个城市的名字。如果记读到的城市名字的数量为n。
然后,你会读到nxn的一个整数矩阵。第一行的每一个数字,表示上述城市名单中第一个城市依次到另一个城市之间的里程。表中同一个城市之间的里程为0。
最后,你会读到两个城市的名字。
输出格式:
输出这两个城市之间的距离。
输入样例:
Hagzou Hugzou Jigxng ###
0 1108 708
1108 0 994
708 994 0
Hagzou Jigxng
输出样例:
708
- 题目2
内容:在我们上午实现的记事本程序的基础上,添加如下功能:
- “记录查询”功能,即输入一组关键字(String[] keywords)查询所有包括这组关键字的记录内容
- “删除恢复”功能,即支持对最近n条删除的记录的恢复,恢复包括:内容恢复和存储位置恢复(插入到删除前的index)
二、实验运行结果
题目1:
题目2:
三、程序源代码
题目1
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
public class Lab4_1 {
//顺序容器,存储城市的名字
private ArrayList<String> city=new ArrayList<String>();
//哈希容器。前者表示第i个城市,内部Hash表示第j个城市及城市之间的距离
private HashMap<String,HashMap<String,Integer>> distance=new HashMap<String,HashMap<String,Integer>> ();
Scanner input;
public void add() {
input = new Scanner(System.in);
String s;
boolean b=true;
//判断,当输出城市以###结尾时,不再输入
while(b) {
s=input.next();
if(s.equals("###") == true) {
b=false;
break;
}
city.add(s);
}
//读入距离
for(int i=0;i<city.size();i++) {
HashMap<String,Integer> HM=new HashMap<String,Integer>();
for(int j=0;j<city.size();j++){
int dis = input.nextInt();
HM.put(city.get(j), dis);
}
distance.put(city.get(i), HM);
}
}
//查找两个城市之间的距离
public int getDistance(){
//输入起始城市和终点城市
String start = input.next();
String end = input.next();
int dis = 0;
dis = distance.get(start).get(end);
return dis;
}
public static void main(String[] args) {
Lab4_1 distan=new Lab4_1();
distan.add();
//计算结果
System.out.println(distan.getDistance());
}
}
题目2
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;
public class Notebook {
private ArrayList<String> notebook = new ArrayList<String>();
//两个回收站容器,一个记录位置,一个记录内容
private ArrayList<String> recyled_notebook = new ArrayList<String>();
private ArrayList<Integer> recyled_index = new ArrayList<Integer>();
//private int size = 0;
/*增加笔记*/
public void add(String note) {
notebook.add(note);
}
public void add(String note, int loc) {
notebook.add(loc, note);
}
/*得到笔记数量*/
public int getSize() {
return notebook.size();
}
/*根据index得到笔记*/
public String getNote(int index) {
return notebook.get(index);
}
/*删除笔记*/
public void removeNote(int index) {
//将要被删除的notebook的信息先放到回收站中
recyled_notebook.add(getNote(index));
recyled_index.add(index);
//从notebook中移除
notebook.remove(index);
}
/*恢复删除的前n条记录*/
public void recover(int num){
for (int i=0;i<num;i++){
if(recyled_index.size() <= 0){
System.out.println("找不到更多可以恢复的记录");
}
//恢复
this.add(recyled_notebook.get(recyled_notebook.size()-1),recyled_index.get(recyled_index.size()-1));
//删除掉回收站中已删除的元素
recyled_notebook.remove(recyled_notebook.size()-1);
recyled_index.remove(recyled_notebook.size()-1);
}
}
/*• “记录查询”功能,即输入一组关键字(String[] keywords)查询所有包括这组关键字的记录内容*/
public void find(String[] keywords){
//对每个关键字进行逐个查询
for (int i = 0; i < keywords.length; i++) {
System.out.println();
System.out.println("包含关键字"+keywords[i]+"的记录有:");
//在每条记录中查询,并输入含有相关关键字的记录
for (int j = 0; j < notebook.size(); j++) {
if(notebook.get(j).contains(keywords[i])){
System.out.println(notebook.get(j)+"(第"+(j+1)+"条记录)");
}
}
}
}
/*打印notebook中的全部记录*/
public String[] list() {
String[] a = new String[notebook.size()];
for (int i = 0; i < a.length; i++) {
a[i] = notebook.get(i);
}
// notebook.toArray(a);
return a;
}
public static void main(String[] args) {
//以下是测试程序的代码
Scanner input = new Scanner(System.in);
Notebook nb = new Notebook();
nb.add("星期一,小明学习了英语和数学");
nb.add("星期二,小王复习了c++");
nb.add("星期一,小红上了一节java课");
nb.add("星期五,小红和小明一起图书馆学习了Python");
nb.add("星期六,小红和小明都没有学习");
System.out.println("此时,notebook中共有"+nb.getSize()+"条记录:");
for (String s :
nb.list()) {
System.out.println(s);
}
System.out.println();
System.out.println("------查询功能测试------");
System.out.println("请输入三个关键字:");
String[] keywords = new String[3];
for (int i = 0; i < 3; i++) {
keywords[i] = input.next();
}
nb.find(keywords);
System.out.println();
System.out.println("------恢复功能测试-------");
System.out.print("现删除1,3,4条记录后,");
nb.removeNote(0);
nb.removeNote(1);
nb.removeNote(1);
System.out.println("notebook中共有"+nb.getSize()+"条记录:");
for (String s :
nb.list()) {
System.out.println(s);
}
System.out.println();
System.out.println("输入您想恢复的记录条数:");
int n = input.nextInt();
nb.recover(n);
System.out.println("执行恢复操作后,notebook中共有"+nb.getSize()+"条记录:");
for (String s :
nb.list()) {
System.out.println(s);
}
}
}