java实验报告_城市查询(浙江大学慕课瓮恺)

一、实验内容

  1. 题目1

内容:使用容器类存储城市间的历程,并支持历程查询

下图为国内主要城市之间的公路里程:

 

https://img-ph-mirror.nosdn.127.net/VmSq38EtPBuo_p6oNtyVFQ==/6630868754095812824.jpg

 

你的程序要读入这样的一张表,然后,根据输入的两个城市的名称,给出这两个城市之间的里程。

 

注意:任何两个城市之间的里程都已经给出,不需要计算经第三地中转。

注意:你并不需要去录入上图的数据,数据是在程序输入中给的。

 

输入格式:

首先,你会读到若干个城市的名字。每个名字都只是一个英文单词,中间不含空格或其他符号。当读到名字为“###”(三个#号)时,表示城市名字输入结束,###并不是一个城市的名字。如果记读到的城市名字的数量为n。

然后,你会读到nxn的一个整数矩阵。第一行的每一个数字,表示上述城市名单中第一个城市依次到另一个城市之间的里程。表中同一个城市之间的里程为0。

最后,你会读到两个城市的名字。

 

输出格式:

输出这两个城市之间的距离。

 

输入样例:

Hagzou   Hugzou Jigxng    ###

0             1108              708

1108              0                 994

708               994               0

Hagzou    Jigxng

 

输出样例:

708

  1. 题目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);
        }



    }

}

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值