一共是两道作业题,先是时钟后是查找里程,往下翻吧。(*´∀`)~♥
有秒计时的数字时钟
题目内容
这一周的编程题是需要你在课程所给的时钟程序的基础上修改而成。但是我们并不直接给你时钟程序的代码,请根据视频自己输入时钟程序的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()) 就是line ,h.get(in.next()).get(in.next()) 就是line.get(in.next()) |