JAVA 期末复习-编程题

期末复习-编程题

  1. 假设已经封装好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;
    }
  1. 苹果有不同的种类,而不同的品牌会同生产同一种苹果,苹果、种类和品牌三者可以构成一种嵌套关系。
    //品牌
    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. 编写一个方法,传入一个登记人数,输出登记人数,一旦传入参数为负数,且抛出自定义的异常。
    //(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();
    }
}
  1. 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();
    }
}
  1. 基于基本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
}

如有错误之处,还请斧正!

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-flop-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值