Java 有秒计时的数字时钟 | 查找里程

  一共是两道作业题,先是时钟后是查找里程,往下翻吧。(*´∀`)~♥

 

有秒计时的数字时钟

题目内容
这一周的编程题是需要你在课程所给的时钟程序的基础上修改而成。但是我们并不直接给你时钟程序的代码,请根据视频自己输入时钟程序的Display和Clock类的代码,然后来做这个题目。
我们需要给时钟程序加上一个表示秒的Display,然后为Clock增加以下public的成员函数:

  • public Clock(int hour, int minute, int second);
    用hour, minute和second初始化时间。
  • public void tick();
    “嘀嗒”一下,时间走1秒。
  • public String toString();
    返回一个String的值,以“hh:mm:ss“的形式表示当前时间。这里每个数值都占据两位,不足两位时补0。如“00:01:22”。注意其中的冒号是西文的,不是中文的。

提示: String.format()可以用和printf一样的方式来格式化一个字符串。

另外写一个Main类,它的main函数为下面的样子,注意,必须原封不动地作为Main的main函数(也就是说,人家已经给你写好main函数了,你直接复制就OK)

    public static void main(String[] args) {
        java.util.Scanner in = new java.util.Scanner(System.in);
        Clock clock = new Clock(in.nextInt(), in.nextInt(), in.nextInt());
        clock.tick();
        System.out.println(clock);
        in.close();
    }

注意! 在提交的时候,把Main、Clock和Display三个类的代码合并在一起,其中Main类是public的,而Clock和Display类是没有修饰符的。另外,千万注意第一行不能有package语句。

输入格式

采用给定的main函数无需考虑输入输出。

输出格式

采用给定的main函数无需考虑输入输出。


public class Main {

            public static void main(String[] args) {//给定的不需要修改的main函数
        java.util.Scanner in = new java.util.Scanner(System.in);
        Clock clock = new Clock(in.nextInt(), in.nextInt(), in.nextInt());
        clock.tick();
        System.out.println(clock);
        in.close();
    }

}
/*----------------------------------------------------------------------*/
class Time {    //设立一个数来计时
    private int value=0; //数值
    private int limit=0; //上限

    public Time(int limit) { //设立计数上限
        this.limit=limit;
    }
    public int SertValue(int n) { //修改上限
        return value=n;
    }
    public boolean increase() {
        boolean flag=false;
        value++;
        if(value==limit) {
            value=0;
            flag=true;
        }
        return flag;
    }
    public int getvalue() {
        return value;
    }
}
/*----------------------------------------------------------------------*/
class Clock {
     Time hour = new Time (24);
     Time minute = new Time (60);
     Time second = new Time(60);
    public void tick() { //就嘀嗒一下
        second.increase();
        if(second.getvalue()== 0){
            minute.increase();
            if(minute.getvalue()==0){
                hour.increase();
            }
        }
    }

    public Clock(int hour, int minute, int second) {    //用hour, minute和second初始化时间。
        this.hour.SertValue(hour);
        this.minute.SertValue(minute);
        this.second.SertValue(second);
    }
    public String toString() {  //注意这个不需要换行符
        return String.format("%02d:%02d:%02d", hour.getvalue(),minute.getvalue(),second.getvalue());
    }
}



查找里程

题目内容:
下图为国内主要城市之间的公路里程:
这里写图片描述
你的程序要读入这样的一张表,然后,根据输入的两个城市的名称,给出这两个城市之间的里程。

注意:任何两个城市之间的里程都已经给出,不需要计算经第三地中转。
注意:你并不需要去录入上图的数据,数据是在程序输入中给的。(也就是说他给你的那张图并没什么卵用

输入格式:
首先,你会读到若干个城市的名字。每个名字都只是一个英文单词,中间不含空格或其他符号。当读到名字为“###”(三个#号)时,表示城市名字输入结束,###并不是一个城市的名字。如果记读到的城市名字的数量为n。
然后,你会读到nxn的一个整数矩阵。第一行的每一个数字,表示上述城市名单中第一个城市依次到另一个城市之间的里程。表中同一个城市之间的里程为0。
最后,你会读到两个城市的名字。

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

输入样例:

Hagzou Hugzou Jigxng ###
0 1108 708
1108 0 994
708 994 0
Hagzou Jigxng

输出样例:

.708

注意:不懂的看后边的补充。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

public class Main {

    private static Scanner in;

    public static void main(String[] args) {
        in = new Scanner(System.in);

        ArrayList<String>City=new ArrayList<String>();
        HashMap<String,HashMap<String, Integer>>  h =new HashMap<String,HashMap<String, Integer>> (); 
        //↑↑↑注意这句了啊,看补充

        while(in.hasNext()) { //读取城市名字并存入ArrayList City中
            String str=in.next();
            if(str.equals("###"))
                break;
            else
                City.add(str);
        }

        for(int i=0;i<City.size();i++) {   //读入integer类型的矩阵
            HashMap<String, Integer> line =new HashMap<String, Integer>();
            for(int j=0;j<City.size();j++) {
                line.put(City.get(j),in.nextInt());
            }
            h.put(City.get(i),line);
        }

        //直接输出了呀↓↓↓
        System.out.println(h.get(in.next()).get(in.next()));
    }

}

补充:
就补充两点,代码中出现的两行HashMap<String,HashMap<String, Integer>> h =new HashMap<String,HashMap<String, Integer>> ();System.out.println(h.get(in.next()).get(in.next()));

HashMap<String,HashMap<String, Integer>> h.get(in.next()).get(in.next());
HashMap<K,V>中的Value:
① 不可以用普通数据类型,只能用相对应的封装类
②除了封装类也可是用户自己写的类,当然也可以是其他的Hashmap等等
③也可以为null(Key也可以为null)
h是key为String,Value为line,然后line是key为String,value为Integer
因此h.get(in.next())就是lineh.get(in.next()).get(in.next())就是line.get(in.next())

*٩(๑´∀`๑)ง我是萝莉安,我会加油的。

猜你喜欢

转载自blog.csdn.net/qq_36667170/article/details/81189868