答案后续发布
欢迎来到小明的练习空间
你好! 一下时小明同学总结的一些java练习题,比较基础,赶快来试试你这段时间学习的如何吧.
我本人也是曾经在网络上找练习题 没等练习到 时间已经流逝在找题的过程中了 , 所以话不多,直接说步入主题
一 【异常】编程题
1.1 题目一
请定义main()方法,在main()中按以下顺序要求编写代码:
- 分别从控制台接收两个整数
- 计算“第一个数 / 第二个数”的结果,并打印;
- 为了防止第二个数为0导致异常,请在计算时使用异常处理。当出现异常时,向用户打印:第二个数不能为0!!
1.2 题目二
请定义main()方法,在main()中按以下顺序要求编写代码:
-
定义一个String[]数组如下:
String[] arr = {”星期一”,”星期二”,”星期三”,”星期四”,”星期五”,”星期六”,”星期日”};
-
请用户输入一个整数1–7的值:
-
根据用户输入,从数组中取出对应的星期名称,例如:
用户输入:1
程序提示:星期一
为了防止用户输入小于1或者大于7的值,请使用异常处理从数组中取出对应的“星期名称”,在异常处理中打印:输入错误!!
1.3 题目三
请按如下格式定义测试类:
public class Test2_3{
public static void main(String[] args){
//测试调用:会导致方法内抛出“空指针异常”
int n1 = getMax(null);
//测试调用:会导致方法内抛出“数组索引越界异常”
int[] arr = new int[0];
int n2 = getMax(arr);
//测试调用:正常
int[] arr2 = {1,2,4,24,32,5324,32};
int n3 = getMax(arr2);
System.out.println("程序继续执行");
}
//获取数组最大值
public static int getMax(int[] args){
int max = args[0];
for(int i = 1 ; i < args.length ; i++){
if(max < args[i]){
max = args[i];
}
}
return max;
}
}
```java
在这里插入代码片
请给代码加上异常处理,使得在有异常的情况下,程序依然能够向下执行
1.4题目四
请使用代码描述 :
- 写一个方法实现用户登陆,传入用户名和密码。
- 如果用户名错误,就抛出自定义登陆异常(LoginException),异常信息为用户名不存在。
- 如果密码错了就也抛出登陆异常,异常信息为密码错误 4. 如果用户名和密码都对了,输出: 欢迎xxx 说明:正确用户名和密码都是admin。
二 【集合】问答+编程题目
1.1 请问Collection接口下有哪些类型的集合?它们分别是什么?
1.2 请问Collection接口中定义的方法,它的所有子类是否都有,而且都会实现这些方法?
1.3 请问向Collection集合添加一个元素用什么方法?
1.4 请问从Collection集合中删除一个元素用什么方法?这个方法有返回值吗?
1.5 请问判断Collection集合中是否包含一个元素用什么方法?
1.6 请问用什么方法可以获取Collection集合中元素的数量?
2.1【集合】 编程题 Collection接口
请定义一个Collection类型的集合,存储以下字符串:
“JavaEE企业级开发指南”,”Oracle高级编程”,”MySQL从入门到精通”,
”Java架构师之路”
请编程实现以下功能:
使用迭代器遍历所有元素,并打印
使用迭代器遍历所有元素,筛选书名小于10个字符的,并打印;
使用迭代器遍历所有元素,筛选书名中包含“Java”的,并打印
如果书名中包含“Oracle”,则删掉此书。删掉后,遍历集合,打印所有书名。
(注意:以上功能写在一个main()方法中,但请单独实现)
2.2【集合】 编程题 Collection接口
请定义一个Collection类型的集合,存储以下分数信息:
88.5,39.2,77.1,56.8,89,99,59.5
请编程实现以下功能:
使用增强for遍历所有元素,并打印
使用增强for遍历所有元素,打印不及格的分数;
使用增强for遍历所有元素,计算不及格的分数的数量,和平均分,并打印计算结果。
使用增强for遍历所有元素,求出最高分,并打印;
(注意:以上所有功能写在一个main()方法中,但请单独实现)
2.3【集合】 编程题 Set接口
1 题目
请编写main()方法,按以下要求顺序
定义一个Set集合,并存储以下数据:
刘备,关羽,张飞,刘备,张飞
打印集合大小
使用迭代器遍历集合,并打印每个元素
使用增强for遍历集合,并打印每个元素
2 题目
请按以下要求顺序编码:
定义学生类Student,属性:姓名、性别、年龄
定义测试类,及main()方法
定义一个存储Student类型的HashSet集合
创建以下三个Student对象
张三,男,20
李四,女,21
张三,男,20
将上述三个对象存储到Set集合中
使用增强for遍历集合,获取每个Student对象,并打印属性值;
请实现集合中不能存储姓名年龄相同的元素
3 题目
请按以下要求顺序编码:
定义一个可以存储“整数”的LinkedHashSet对象
存储以下整数
20,30,50,10,30,20
打印集合大小。为什么跟存入的数量不一致?
使用增强for遍历集合,打印大于25的元素
4 题目
请按以下要求顺序编码:
定义一个可以存储“整数”的TreeSet对象
存储以下整数
30,20,50,10,30,20
打印集合大小。为什么跟存入的数量不一致?
遍历集合,打印大于25的元素
2.3【集合】 编程题 Map接口
1 题目
请按以下要求顺序编码:
定义一个:键Integer,值String类型的HashMap集合
存储以下数据:
1,”张三”
2,“李四”
1,“王五”
打印集合大小;
使用“键找值”的方式遍历集合,打印键和值;
使用“键值对”的方式遍历集合,打印键和值;
获取键为1的值,并打印
获取键为10的值,并打印
判断集合中是否有键:10
删除键为1的键值对,删除完毕打印集合
2 题目
有以下字符串:
String str = “fje你kw我FDQFj你feAF他Eajf他eo2FA我FEjfew”;
请编程统计每个字符出现的次数
三 【File类】编程题
1.1 题目一
请在D盘根目录下创建一个文件:test1.txt(随意录入一些内容),再创建一个目录:测试目录
请编写main()方法,创建以下两个File对象:
File file1 = new File(“d:\\test1.txt”);
File file2 = new File(“d:\\测试目录”);
要求:
1. 获取、打印file1和file2的绝对路径;
2. 获取、打印file1和file2的文件名和目录名;
3. 获取、打印file1和file2的文件大小;
4. 分别判断file1和file2是否存在;
5. 分别判断file1和file2是否是文件?是否是目录?
1.2 题目二
请编写main()方法,创建以下File对象:
File file1 = new File(“test.txt”);//相对路径,在项目根目录下
File file2 = new File(“一级目录”);
File file3 = new File(“目录A/目录B/目录C”);
要求:
1. 判断file1是否存在?如果不存在,创建这个文件。
2. 判断file2是否存在?如果不存在,创建这个目录。
3. 判断file3是否存在?如果不存在,创建这个多级目录。
1.3 题目三
请在D盘下创建一个目录“多级目录”,下面随意创建一些文件和目录。
请编写main()方法,创建以下File对象:
File file = new File(“D:\\多级目录”);
要求:
1. 获取这个file目录下所有的子文件/子目录的File数组
2. 遍历这个数组,判断每个File对象是否文件
如果是文件,打印:【文件】+ 绝对路径
如果是目录,打印:【目录】+ 绝对路径
四 【递归】编程题
2.1 题目一
请使用递归计算5的阶乘
2.2 题目二
请使用递归计算从1--100的所有数的累加和。
五【Stream流】编程题
1 题目一
定义main()方法,按以下顺序编写程序:
- 定义集合List,添加以下数据:
“张三丰”, “王思聪”, “张飞”, “周慧敏”, “张靓颖”
- 使用Stream流的forEach()方法打印集合的所有元素
2 题目二
定义main()方法,按以下顺序编写程序:
- 定义集合List,添加以下数据:
“张三丰”, “王思聪”, “张飞”, “周慧敏”, “张靓颖”
- 使用Stream流的filter()方法筛选集合中所有的“张”姓学员;
- 筛选后,使用forEach()方法打印筛选结果。
3 题目三
定义main()方法,按以下顺序编写程序:
- 定义集合List,添加以下数据:
“张三丰”, “王思聪”, “张飞”, “周慧敏”, “张靓颖”
- 使用Stream流的filter()方法筛选集合中所有的“张”姓学员;
- 筛选后,使用count()方法获取筛选的数量。
4 题目四
定义main()方法,按以下顺序编写程序:
-
定义集合List,添加以下数据:
“张三丰”, “王思聪”, “张飞”, “周慧敏”, “张靓颖”
-
获取Stream流,用filter()方法筛选出所有的“张”姓学员;
-
筛选后,跳过前2个,打印剩余的人员。
5 题目五
定义main()方法,按以下顺序编写程序:
-
定义集合List,添加以下数据:
“张三丰”, “王思聪”, “张飞”, “周慧敏”, “张靓颖”,“王一博”,
-
先筛选出所有的“张”姓学员;
-
再筛选出所有的“王”姓学员;
-
将两个流合并为一个流
-
打印合并后的每个元素。
6 题目六
1.定义一个Person类,包含一个属性:姓名(String)
定义无参、全参构造方法
定义get/set方法
2.定义main()方法,按依稀顺序编写程序:
定义集合List,添加以下数据:
“周慧敏”, “张靓颖”, “王一博”
使用Stream流的map()方法,将每个元素封装为一个Person对象。
将新流中的元素提取为List集合。
遍历、打印集合中所有的Person对象信息。
六 【IO流】编程题
训练案例1
训练描述
利用字节输出流一次写一个字节的方式向C盘的a.txt文件输出内容。
操作步骤描述:
1.创建字节输出流FileOutputStream对象并指定文件路径。
2.调用字节输出流的write(int byte)方法写出数据
训练案例2
训练描述
利用字节输出流一次写一个字节数组的方式向C盘的b.txt文件输出内容。
操作步骤描述
1.创建字节输出流FileOutputStream对象并指定文件路径。
2.调用字节输出流的write(byte[] buf)方法写出数据。
训练案例3
训练描述
利用字节输出流对象往C盘下c.txt文件输出5句:”i love java”
要求:
1.不能覆盖文件中原有的内容
2.每一句输出各占一行
操作步骤描述
- 利用两个参数的构造方法创建字节输出流对象,参数一指定文件路径,参数二指定为true
- 调用字节输出流的write()方法写入数据,在每一行后面加上换行符:”\r\n”
训练案例4
训练描述
利用字节输入流读取C盘文件a.txt的内容,使用循环读取,一次读取一个字节,直到读取到文件末尾。
将读取的字节输出到控制台。
操作步骤描述
- 创建字节输入流对象指定文件路径。
- 调用read(byte b)方法循环读取文件中的数据。
- 直到读取到-1时结束读取。
训练案例5
训练描述
利用字节输入流读取C盘文件b.txt的内容,使用循环读取,一次读取一个字节数组,直到读取到文件末尾,
将读取到的字节数组转换成字符串输出到控制台。
操作步骤描述
- 创建字节输入流对象指定文件路径。
- 定义一个字节数数组,用来存放读取的字节数。
- 调用read(byte[]buf)方法传入字节数组,循环读取文件中的数据。
- 直到读取到-1时结束读取。
训练案例6
训练描述
用字节流将C盘下的a.png图片复制到D盘下(文件名保存一致)
要求:一次读写一个字节数组的方式进行复制
操作步骤描述
- 创建字节输入流对象关联文件路径:C盘下的a.png。
- 创建字节输出流对象关联文件路径:D盘下的a.png。
- 定义一个字节数组,用来存放读取到文件字节数。
- 使用循环不断从字节输入流读取一个字节数组,每读取一个字节数组就利用输出流写出一个字节数组。
- 关闭流,释放资源。
训练案例7
训练描述
从控制台循环接收用户录入的学生信息,输入格式为:学号-学生名字。
将学生信息保存到C盘下面的stu.txt文件中,一个学生信息占据一行数据。
当用户输入end时停止输入。
要求使用字节输出流写出数据。
操作步骤描述
1.使用Scanner类进行键盘录入数据。
2.创建字节输入流对象关联目标文件。
3.使用死循环不停的接收用户输入的学生数据。
4.接收用户输入的学生数据。
5.判断输入的内容是否是end,是则终止循环,停止输入。否则就数据写出到文件中。
6.1 【缓冲流】 编程题
1.1 题目一
请将D:盘下的一个文件复制到E:盘下,例如:d:\视频.itcast,复制到E:\视频.itcast。
请使用“字节缓冲流”:BufferedInputStream和BufferedOutputStream实现
1.2 题目二
请编写main()方法,定义一个存储String的集合:List,并初始化以下数据:
List list = new ArrayList<>();
list.add(“迪丽热巴”);
list.add(“古力娜扎”);
list.add(“周杰伦”);
list.add(“蔡徐坤”);
//请定义“字符缓冲输出流”BufferedWriter将集合中的数据写入到文件:test3_2.txt中,每个名字一行。
1.3 题目三
请编写main()方法,定义一个字符缓冲输入流BufferedReader,读取test3_2.txt文件,一次读取一行,将读取的内容存储到一个List集合中,遍历、并打印集合中的每个元素:
//1.定义一个字符缓冲输入流
BufferedReader in = new BufferedReader(…);
//2.定义一个集合
List list = new ArrayList<>();
//3.一次读取一行
…
…
1.4 题目四
请按以下要求编写程序:
1).定义一个学员类,有以下属性:姓名、性别、年龄、分数
无参、全参构造方法,get/set方法
2).定义main()方法,定义一个存储Student的集合,并初始化一些数据:
List stuList = new ArrayList<>();
stuList.add(new Student(“迪丽热巴”,”女”,18,99);
stuList.add(new Student(“古力娜扎”,”女”,19,98);
stuList.add(new Student(“周杰伦”,”男”,20,88);
stuList.add(new Student(“蔡徐坤”,”男”,19,78);
3).定义一个字符缓冲输出流BufferedWriter,将学员信息写入到”test3_4.txt”中,
每个学员信息占一行,每个字段之间用,符号隔开,例如:
迪丽热巴,女,18,99
古力娜扎,女,19,98
周杰伦,男,20,88
蔡徐坤,男,19,78
1.5 题目五
请编写main()方法,定义一个字符缓冲输入流BufferedReader对象,读取”test3_4.txt”文件,一次读取一行,将每行数据封装为一个Student对象,并将Student对象存储到一个集合。遍历并打印集合的所有Student信息。
//定义一个BufferedReader对象
BufferedReader in = new BufferedReader(…);
//定义一个集合
List stuList = new ArrayList<>();
//一次读取一行
编程题【转换流】**
2.1 题目一
请定义一个输出转换流对象:OutputStreamWriter,使用GBK编码,向文件”test4_1.txt”文件输出内容:”我要学好Java,我要月薪过万!!
2.2 题目二
请定义一个输入转换流对象:InputStreamReader,使用GBK编码读取“test4_1.txt”文件的内容,并打印。
6.2 【序列化】编程题
3.1 题目一
请定义Student类,有以下属性:姓名、性别、年龄,并实现Serializable接口。
请定义main()方法,创建一个Student对象:
Student stu = new Student(“迪丽热巴”,”女”,18);
//定义一个序列化对象:ObjectOutputStream,将stu序列化到文件“test5_1.txt”中
3.2 题目二
请定义main()方法,创建一个反序列化对象:ObjectInputStream,将文件”test5_1.txt”的对象反序列化到程序中,并打印此对象。
6.3 【打印流】编程题
从键盘录入一行字符串,利用字节打印流将该行字符串保存到当前项目根目录下的d.txt文件中。
操作步骤描述
- 创建字节打印流对象并关联文件路径。
- 调用字节打印流对象的打印方法将内容输入到目标文件中。
- 关闭流释放资源。
七 【线程】编程题
1.1 题目一
请使用继承Thread类的方式定义一个线程类,在run()方法中使用循环变量i遍历1--1000所有的数字。
定义main()方法,启动这个线程,然后再使用循环变量k遍历1--1000所有的数字。
请观察控制台打印,i和k交叉打印的情况。
1.2 题目二
请使用实现Runnable接口的方式定义一个类,在run()方法中使用循环变量i遍历1--1000所有的数字。
定义main()方法,启动这个线程,然后再使用循环变量k遍历1--1000所有的数字。
请观察控制台打印,i和k交叉打印的情况。
1.3 题目三
请使用继承Thread类的方式定义一个线程类,在run()方法中循环10次,每1秒循环1次,每次循环按“yyyy-MM-dd HH:mm:ss”的格式打印当前系统时间。
请定义测试类,并定义main()方法,启动此线程,观察控制台打印。
1.4 题目四
请使用继承Thread类的方式定义两个线程,一个线程可以计算1--100所有数字的累加和,另一个线程可以计算1--1000所有数字的累加和,每个线程计算完毕后各自打印计算结果,格式例如:”xxx线程计算1--100的累加和,结果:xxxx”
请定义测试类,并定义main()方法,启动两个线程,观察控制台打印结果。
7.1 【匿名内部类的方式实现线程】编程题
1 题目
请使用“匿名Runnable”子类的方式实现线程,线程中计算1--500所有数字的累加和,并打印计算结果。
7.2【synchronized关键字】编程题
1 题目一
请编写程序,不使用任何同步技术,模拟三个窗口同时卖100张票的情况,运行并打印结果,观察到错误的数据,并解释出现错误的原因。
2 题目二
请使用“同步代码块”改写3.1的程序,保证运行结果的正确。
3 题目三
请使用“同步方法”改写3.1的程序,保证运行结果的正确。
4 题目四
请使用“Lock锁”改写3.1的程序,保证运行结果的正确