期末复习-编程题
- 假设已经封装好Book,请根据要求实现对应的方法
public class Book {
private String bookname;//书名
private String author;//作者
private String publish;//出版社
private double price;//价格
private int print;//版次
private int count;//印数
private String time; //出版时间
//省略所有的getter及setter
}
说明:
可自定义方法的名称及参数名,但最好做到见名知意,参数的类型及返回类型一定要和题意一致
标清题号只提交三个方法的代码
(1)传入一个Book对象的List集合以及作者名,返回一个包含该作者出版的所有图书名字的List集合
public static List<String> listBookByAuthor(List<Book> book,String author){
List<Book> bo=book
.stream()
.filter(a->a.getAuthor()==author)
.collect(Collectors.toList());
List<String> bookFilter=new ArrayList<>();
for(int i=0;i<bo.size();i++){
bookFilter.add(bo.get(i).getBookName());
}
return bookFilter;
}
(2)传入一个Book对象的List集合,返回一个按书定价从小到大排序的书的名字的集合。
public static List<String> listBookByPrice(List<Book> book){
List<Book> bo=book
.stream()
.sorted(Comparator.comparing(Book::getPrice))
.collect(Collectors.toList());
List<String> bookFilter=new ArrayList<>();
for(int i=0;i<bo.size();i++){
bookFilter.add(bo.get(i).getBookName());
}
return bookFilter;
}
(3)传入一个Book对象的List集合,返回一个按出版社分组的Map,Map的key为出版社,value为该出版社的图书集合。
public static Map<String,List<Book>> mapBook(List<Book> book){
List<Book> bookList = book;
Map<String, List<Book>> map = new HashMap<>();
for (Book bo : bookList) {
map.putIfAbsent(bo.getPublish(), new ArrayList<>());
map.get(bo.getPublish()).add(bo);
}
return map;
}
- 苹果有不同的种类,而不同的品牌会同生产同一种苹果,苹果、种类和品牌三者可以构成一种嵌套关系。
//品牌
public class Brand {
private String brandName;
//省略brandName的getter/setter方法
}
//种类
public class Kind {
private Brand brand;
// 省略brand的getter/setter方法
}
//苹果
public class Apple {
private Kind kind;
// 省略kind的getter/setter方法
}
假设我想得到某个苹果的品牌信息,怎么办?请帮我完成下面的方法:
public static String getAppleBrandName(Apple apple) {
//…
}
要求
(1)不能出现NullPointerException
(2) 不能用if语句判断
说明:只提交getAppleBrandName()的代码
public static String getAppleBrandName(Apple apple) {
String brand= Optional.ofNullable(apple)
.map(Apple::getKind)
.map(Kind::getBrand)
.map(Brand::getBrandName)
.orElse("未知");
return brand;
}
- 编写一个方法,传入一个登记人数,输出登记人数,一旦传入参数为负数,且抛出自定义的异常。
//(1)自定义异常类MyException
public class Test{
public void regist(int num) throws MyException {
//(2)按题目要求完成方法体
}
public void manager() {
//(3)调用regist(int num)完成登记,如果参数为负,显示“人数为负值,不合理”的提示信息
System.out.print(“本次登记操作结束”);
}
public static void main(String args[]){
Test t = new Test();
t.manager();
}
}
import java.util.Scanner;
public class Test {
//(1)自定义异常类MyException
class MyException extends Exception{
final String message="人数为负值,不合理";
public String warnMess(){
return message;
}
}
public void regist(int num) throws MyException {
//(2)按题目要求完成方法体
if(num<0) {
throw new MyException();
}
}
public void manager() {
//(3)调用regist(int num)完成登记,如果参数为负,显示“人数为负值,不合理”的提示信息
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
try {
regist(a);
} catch (MyException e) {
System.out.println(e.warnMess());
}
System.out.print("本次登记操作结束");
}
public static void main(String args[]) {
Test t = new Test();
t.manager();
}
}
- AB两个人拥有同一个账户,两个人同时从这个账户取钱,假设账户已有钱数是10000元,A从柜台进行取钱,一次取300元,取后输出“A在柜台进行取钱,取了300元!目前账户还有XXX元”;B从ATM机进行取钱,一次取200元,取后输出“B从ATM机进行取钱,取了200元!目前账户还有XXX元”,直到账户钱数不足两人要取的数时,就不能取了,输出“余额不足。”,其中XXX是账户的余额数。
编程用个线程模拟AB两个人的取钱过程,要求
(1)两个人都有取钱的过程;
(2)不能出现钱数不一致的问题。
说明:
该题提交完整的程序代码
class Money implements Runnable {
private int Money = 10000;
private boolean flag = true;
private synchronized void draw() {
if (Money <= 0) {
flag = false;
System.out.println("余额不足。");
return;
}
if(Thread.currentThread().getName()=="A"){
Money-=300;
System.out.println("A在柜台进行取钱,取了300元!目前账户还有"+Money+"元");
}
else if(Thread.currentThread().getName()=="B"){
Money-=200;
System.out.println("B在柜台进行取钱,取了200元!目前账户还有"+Money+"元");
}
}
@Override
public void run() {
while (flag) {
draw();
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) {
Money p = new Money();
Thread p1 = new Thread(p, "A").start();
Thread p2 = new Thread(p, "B").start();
}
}
- 基于基本IO,以及字节数组缓冲区,实现文件的复制文件,无需考虑文件不存在问题。
要求:
(1)用基本IO,基于字节数组缓冲区实现,不能用nio包中的类
(2)在复制后的文件开始加上一行信息,具体内容是:自己的名字、学号及籍贯信息
(3)异常在方法内处理
(4)资源必须被正确关闭;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Test2 {
public static void main(String[] args) {
String fileName = “C:/example/file1.txt”;
String toFile = “C:/example/file2.txt”;
copyFile(fileName, toFile);
}
//start
//在此处添加 copyFile()方法的实现,
//end
}
说明:只提交copyFile()方法的代码
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Test2 {
public static void main(String[] args) {
String fileName = "C:/example/file1.txt";
String toFile = "C:/example/file2.txt";
copyFile(fileName, toFile);
}
//start
//在此处添加 copyFile()方法的实现,
public static void copyFile(String fileName,String toFile){
try(InputStream is = new FileInputStream(fileName);
OutputStream os = new FileOutputStream(toFile, true)){
byte[] buffer = new byte[1024];
int len = 0;
while ((len=is.read(buffer)) != -1){
os.write(buffer, 0, len);
}
String str="西门庆 2020222222 山东阳谷";
byte[] bytes = str.getBytes();
int b=bytes.length;
os.write(bytes,0,b);
os.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//end
}
如有错误之处,还请斧正!