**第一题:**
输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。
提示:
对比char字符在ASK码的范围,就可以确定它符号的类别
char字符ASK码的范围
* 数字0到9: 48~57
* 字母A到Z:65到90 a到z:97到122
* 空格是32
如:
~~~
char a = 'a';
97<= a <=122
~~~
答:
~~~java
public class Client {
public Map<String, Integer> getCharNumber(String str) {
int num = 0,letter = 0,space = 0,other = 0;//变量的共同定义,表示这四个变量都是int类型
Map<String,Integer> map = new HashMap<String, Integer>();
if(str != null && str.length() > 0) {
char[] charArray = str.toCharArray();//将字符串分割为char数组
for(char cr:charArray) {
if(cr >= 48 && cr <= 57) {//数字
num++;
} else if((cr >= 65 && cr <= 90) || (cr >= 97 && cr <= 122)) {//字母
letter++;
} else if(cr == 32) {//空格
space++;
} else {//其他
other++;
}
}
}
map.put("数字", num);
map.put("字母", letter);
map.put("空格", space);
map.put("其他", other);
return map;
}
public static void main(String[] args) {
Client client = new Client();
//如果方法存在返回值,需要创建一个与返回值类型相同的变量来接收返回值
Map<String, Integer> map = client.getCharNumber("n wn =-0 qu wr s['");
System.out.println(map);
}
}
~~~
**第二题**
要求写一个秒表类(StopWatch),该秒表类该类在系统中只能有存在一个实例。并且存在star方法,可以用于开始计时,并且输出开始时间,同时存在stop方法用于停止计时,输出结束时间,要求秒表可以存储以毫秒为单位十个计时任务
~~~java
/**
* 秒表类
* 只能存在一个实例-采用单例设计模式
* @author 一教室
*
*/
public class StopWatch {
/**
* 私有化构造器
*/
private StopWatch() {
}
/**
* 创建时间格式化对象作为属性,方便调用
*/
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
//实例化一个秒表对象,将该对象作为秒表类的属性
private static StopWatch stopWatch = new StopWatch();
/**
* 创建公共方法,对外提供创建出来的stopWatch对象
* @return
*/
public static StopWatch getInstance() {
return stopWatch;
}
/**
* 设置一个属性(开始时间记录器),用于存储秒表开始计时的时间
*/
private Date startTime;
/**
* 设置一个属性(计时任务存储器),用于保存十个计时任务
*/
private List<Long> record = new ArrayList<Long>();
/**
* 只能生成get方法,对外提供计时任务存储器数据,不能生成set方法,防止直接修改存储器数据
* @return
*/
public List<Long> getRecord() {
return record;
}
/**
* 开始计时方法
*/
public void start() {
Date date = new Date();
startTime = date;//将开始计时的时间存储到开始时间记录器中
System.out.println("开始时间:" + sdf.format(date));
}
/**
* 结束计时方法
*/
public void stop() {
if(startTime == null) {//说明没有调用开始计时方法
System.out.println("未曾开始计时");
} else {
Date date = new Date();
System.out.println("结束时间:" + sdf.format(date));
long time = date.getTime() - startTime.getTime();//结束时间-开始时间 = 计时任务要求毫秒数
if(record.size() >= 10) {
record.remove(0);//将最早的计时任务删除
record.add(time);
} else {
record.add(time);
}
}
}
}
~~~
~~~java
public class Test {
public static void main(String[] args) throws InterruptedException {
StopWatch stw = StopWatch.getInstance();
//开始第一次计时
stw.start();
System.out.println(stw.getRecord());
//让程序休息方法
Thread.sleep(40);//让程序暂停40毫秒
stw.stop();
System.out.println(stw.getRecord());
//开始第二次计时
stw.start();
System.out.println(stw.getRecord());
//让程序休息方法
Thread.sleep(30);
stw.stop();
System.out.println(stw.getRecord());
stw.start();
System.out.println(stw.getRecord());
//让程序休息方法
Thread.sleep(30);
stw.stop();
System.out.println(stw.getRecord());
stw.start();
System.out.println(stw.getRecord());
//让程序休息方法
Thread.sleep(30);
stw.stop();
System.out.println(stw.getRecord());
stw.start();
System.out.println(stw.getRecord());
//让程序休息方法
Thread.sleep(30);
stw.stop();
System.out.println(stw.getRecord());
stw.start();
System.out.println(stw.getRecord());
//让程序休息方法
Thread.sleep(30);
stw.stop();
System.out.println(stw.getRecord());
stw.start();
System.out.println(stw.getRecord());
//让程序休息方法
Thread.sleep(30);
stw.stop();
System.out.println(stw.getRecord());
stw.start();
System.out.println(stw.getRecord());
//让程序休息方法
Thread.sleep(30);
stw.stop();
System.out.println(stw.getRecord());
stw.start();
System.out.println(stw.getRecord());
//让程序休息方法
Thread.sleep(30);
stw.stop();
System.out.println(stw.getRecord());
stw.start();
System.out.println(stw.getRecord());
//让程序休息方法
Thread.sleep(30);
stw.stop();
System.out.println(stw.getRecord());
stw.start();
System.out.println(stw.getRecord());
//让程序休息方法
Thread.sleep(30);
stw.stop();
System.out.println(stw.getRecord());
stw.start();
System.out.println(stw.getRecord());
//让程序休息方法
Thread.sleep(30);
stw.stop();
System.out.println(stw.getRecord());
}
}
~~~
# 综合案例(面向对象)
## 场景案例:
学校新开一门专业,叫做计算机科学与应用,专业编号J0001,学制年限为4年。
现有三名学生如下表所示,加入该专业学习,要求采用Java面向对象的思维描述该场景:
| 姓名 | 学号 | 性别 | 年龄 |
| --- | --- | --- | --- |
| 张三 | S01 | 男 | 18岁 |
| 李四 | S02 | 女 | 17岁 |
| 王五 | S03 | 男 | 18岁 |
## 实现效果
![](https://img.kancloud.cn/71/3d/713dfa7a3fc7174f072e6fb00f76dc9b_1011x486.png)
## 案例分析
1. 本场景中共存在几个对象?各自的特征是什么?
2. 我们又可以针对这几个对象抽象归纳出几个类出来
## 代码实现