Java课后作业整理【自用总结】

作业1(抽象类;杨辉三角;阶乘):

在这里插入图片描述

package package4;

public abstract class Algorithum {
    public String alg_name;

    Algorithum() {
    }

    public Algorithum(String newName) {
        alg_name = newName;
    }

    public abstract void Print(int num);
}

Jiecheng.java

package package4;

public class Jiecheng extends Algorithum {
    public void Print(int num) {
        int sum = 1;
        if (num < 0) {
            System.out.println("wrong number!");

        }
        for (int i = 1; i <= num; i++) {
            sum = sum * i;
        }
        System.out.println(sum);
        System.out.println();
    }
}

Yanghui.java

package package4;

public class Yanghui extends Algorithum {
    public void Print(int num) {
        int arr[][] = new int[num][num];
        System.out.println("杨辉三角显示如下:");
        for (int i = 0; i < arr.length; i++) {

            // 打印杨辉三角数组前的空格
            for (int j = 10; j >= i; j--) {
                System.out.print("  ");
            }

            for (int j = 0; j <= i; j++) {
                if (i == j || j == 0)
                    arr[i][j] = 1;
                else
                    arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];

                // 调整格式
                System.out.print(arr[i][j] + "   ");
                if (i == j)
                    System.out.print("\n");
            }
        }
    }
}

Revoke.java

package package4;

import java.util.Scanner;

public class revoke {
    public static void main(String[] args) {
        Jiecheng a = new Jiecheng();
        Yanghui b = new Yanghui();
        System.out.println("Do you want Yang Hui's triangle (y) or factorial (j)?");

        Scanner scanner = new Scanner(System.in);
        String s = scanner.next();
        // char c = s.charAt(0);
        // scanner.close();
        System.out.println("------------");
        if (s.equals("y")) {
            System.out.println("Please enter the number of Yanghui triangle layers you want:");
            Scanner scanner2 = new Scanner(System.in);
            int num = scanner2.nextInt();
            b.Print(num);
        } else if (s.equals("j")) {
            System.out.println("Please enter the number of factorial layers you want:");
            // Scanner scanner2 = new Scanner(System.in);
            int num = scanner.nextInt();
            a.Print(num);
        }
        scanner.close();

    }
}

作业2(泛型类):

在这里插入图片描述
Animal.java

package template;

public abstract class Animal {
    public String color;

    Animal() {
    }

    Animal(String color) {
        this.color = color;
    }

    public abstract String getColor();

}

Cat.java

package template;

public class Cat extends Animal {
    public String name;
    public String color;

    Cat() {
    }

    Cat(String myName) {
        this.name = myName;

    }

    public Cat(String myName, String color) {
        this.name = myName;
        this.color = color;
        System.out.println("--------------Animal(String myName, Color myColor)-------------------");
    }

    public String getColor() {
        System.out.println("-----------猫咪的颜色是" + this.color + "--------");
        return color;
    }
}

Dog.java

package template;

public class Dog extends Animal {
    public String name;
    public String color;

    Dog() {
    }

    Dog(String myName) {
        this.name = myName;

    }

    public Dog(String myName, String color) {
        this.name = myName;
        this.color = color;
        System.out.println("--------------Animal(String myName, String color)-------------------");
    }

    public String getColor() {
        System.out.println("-----------狗狗的颜色是" + this.color + "--------");
        return color;
    }
}

Farm.java

package template;

//泛型类,允许接收T类型 在类内使用
public class Farm<T extends Animal> {

    // 使用T类型,定义成员变量
    private T t;

    public Farm(T t) {
        this.t = t;
    }

    // 使用T类型,做函数参数
    public void add(T t) {
        this.t = t;
        System.out.println("-------------add(T t)-----------");
    }

    // 使用T类型,做返回值
    public T get() {
        return t;
    }

    public String getColor() {

        return t.getColor();
    }

    public static void main(String[] args) {
        // ============================
        // 定义了 以 Dog 类型为传入的Farm类 的对象 dFarm

        Dog dog = new Dog("nini", "red");
        Farm<Dog> dFarm = new Farm<Dog>(dog);
        System.out.printf(dFarm.getColor());
        // 定义了 以 Cat 类型为传入的Farm类 的对象 cFarm
        Cat cat = new Cat("gigi", "white");
        Farm<Cat> cFarm = new Farm<Cat>(cat);
        System.out.printf(cFarm.getColor());

    }
}

作业3(Hashmap;迭代器iterator,异常处理):

1,新建一个Book类,包含书号,书名,内容,需要重写Object的toString()函数。
主函数中,创建5本Book对象,用hashmap存放这5个对象,使用书号作为key,Book对象作为value,然后查询其中一本书,书名是《三字经》,打印书这本书的书号、书名及内容到屏幕上。
通过iterator,查询到书号为“sn012203999584"的书,移除hashmap,
然后再打印出全部的书的信息。
2,创建自定义异常,用于判断当找不到指定书号的情况时(该书不存在时),抛出自定义异常,并且在主函数中捕获异常,并进行处理(打印异常提示)。

Book.java

package zuoye07;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;

class MyExcept extends Exception {
    MyExcept(String message) {
        super(message);
    }
}

public class Book {
    public String book_number;
    public String book_name;
    public String book_content;

    Book(String number, String name, String content) {
        this.book_number = number;
        this.book_name = name;
        this.book_content = content;
    }

    public static String reTest(String a) throws MyExcept {
        try {
            if ((a.equals("a") == false) && (a.equals("sn012203999584") == false) && (a.equals("c") == false)
                    && (a.equals("d") == false) && (a.equals("e") == false)) {
                throw new MyExcept("--自定义异常---");
            }
            return "书号合法!";
        } catch (Exception e) {
            System.out.println(e.toString());
            // TODO: handle exception
            System.out.println("异常啦!!没有这个书号!!!");
            return "书号不合法!";
        } finally {
            System.out.println("finally");

            // 在finally中写return会覆盖 try或者catch中的return值
            // 所以在finally中写return是不好的习惯。
            // return 20;
        }
    }

    public String toString() { // 这是输出对象属性的toSring方法,当然也可以自己更改
        return "Book{" + "书号:" + book_number + ", 姓名:" + book_name + ", 内容:" + book_content + '}';
    }

    public static void main(String[] args) throws MyExcept {
        Book book1 = new Book("a", "《水浒传》", "卢俊义");
        Book book2 = new Book("sn012203999584", "《三字经》", "人之初啊性本善");
        Book book3 = new Book("c", "《红楼梦》", "薛宝钗");
        Book book4 = new Book("d", "《三国演义》", "诸葛亮");
        Book book5 = new Book("e", "《西游记》", "孙悟空");

        HashMap<String, Book> b = new HashMap<String, Book>();
        b.put(book1.book_number, book1);
        b.put(book2.book_number, book2);
        b.put(book3.book_number, book3);
        b.put(book4.book_number, book4);
        b.put(book5.book_number, book5);
        System.out.println("-----------找三字经------------");
        for (String i : b.keySet()) {
            Book value = b.get(i);
            if (value.book_name.equals("《三字经》"))
            // if(value == str1)
            {
                System.out.println(
                        "书号:" + b.get(i).book_number + ", 姓名:" + b.get(i).book_name + ", 内容:" + b.get(i).book_content);
                // System.out.println("key: " + i + " value: " + a1.get(i));
            }
        }

        System.out.println("-----------根据书号找本书------------");
        System.out.println("输入你要找的书号吧:");
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        try {
            System.out.println(reTest(str));
        } catch (MyExcept e1) {
            System.out.println(e1.toString());
        } catch (Exception e) {
            // TODO: handle exception

        } finally {

        }
        for (String i : b.keySet()) {
            Book value = b.get(i);
            if (value.book_number.equals(str)) {
                System.out.println(
                        "书号:" + b.get(i).book_number + ", 姓名:" + b.get(i).book_name + ", 内容:" + b.get(i).book_content);

            }
        }

        // System.out.println(b);
        System.out.println("------遍历输出一下-------------");
        for (String i : b.keySet()) {
            Book value = b.get(i);
            System.out.println(value.book_number + value.book_name + value.book_content);
            // System.out.println(i);
        }
        System.out.println("-------------------");

        // 通过iterator,查询到书号为“sn012203999584"的书,移除hashmap
        Iterator<Book> iter = b.values().iterator();
        while (iter.hasNext()) {
            Book k = iter.next();

            // System.out.println(k);
            if (k.book_number.equals("sn012203999584")) {
                iter.remove();
                System.out.print("删除成功\n");
                break;
            }
        }

        // 遍历输出
        System.out.println("删除三字经后遍历输出:");
        System.out.println("------遍历输出一下-------------");
        for (String i : b.keySet()) {
            Book value = b.get(i);
            System.out.println(value.book_number + value.book_name + value.book_content);
            // System.out.println(i);
        }
        System.out.println(book1.toString());

    }
}

作业4(IO读写文件):

在这里插入图片描述

package iostream;

import java.io.*;
import java.util.Scanner;

public class zuoye08 {
    public static void main(String[] args) throws IOException {

        System.out.println("请选择:1 查看小说目录;2 写小说;3 阅读一本小说;4 查看文件目录");
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        if (a == 2) {
            System.out.println("----------请输入小说名:------------");

            // 这一行的作用非常重要哦,没有它nextLine()自动接收了换行符就不再去接收输入的值了
            sc.nextLine();
            String str1 = sc.nextLine();
            // sc.close();
            String and = ("D:\\fiction\\" + str1 + ".txt");
            // System.out.println(and);
            // 创建一个空文件
            File file = new File(and);
            if (!file.exists()) {
                file.createNewFile();
            }
            writeFile(file);
            // System.out.println("-------------------");

            // 将小说的名字写进我的目录文件里
            File mulu = new File("D:\\fiction\\mulu.txt");
            try { // 捕捉异常
                  // 创建FileOutputStream对象
                  // 2,通过文件对象初始化输出流对象
                FileOutputStream out = new FileOutputStream(mulu, true);
                String msg = "《" + str1 + "》\n";
                byte buy[] = msg.getBytes();
                // System.out.println(msg+"----");
                // System.out.println(msg.getBytes());
                // 3,操作流,写入数据
                out.write(buy); // 将数组中信息写入到文件中
                // 4,关闭流
                out.close(); // 将流关闭
            } catch (Exception e) { // catch语句处理异常信息
                e.printStackTrace(); // 输出异常信息
            }

        } else if (a == 4) {
            ReadDir();
        } else if (a == 3) {
            readFile();
        } else if (a == 1) {
            TestInput();
        }

        // BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\data.txt"));
        // StringBuilder sb = new StringBuilder("");
        // sb.append(str1);

        // File file = new File(dir, str1 + ".txt");
        // System.out.println(file.getPath());
        // crateDir();

        // ------------------------------------------------------
        sc.close();
    }

    public static void crateDir() {
        String dirname = "D:\\fiction";
        File d = new File(dirname);
        // 现在创建目录
        d.mkdirs();
    }

    public static void ReadDir() {

        String dirname = "D:\\fiction";
        File f1 = new File(dirname);
        if (f1.isDirectory()) {
            System.out.println("目录: " + dirname);
            String s[] = f1.list();
            for (int i = 0; i < s.length; i++) {
                File f = new File(dirname + "/" + s[i]);
                if (f.isDirectory()) {
                    System.out.println(s[i] + " 是一个文件夹");
                } else {
                    System.out.println(s[i] + " 是一个小说文件");
                }
            }
        } else {
            System.out.println(dirname + " 不是一个目录");
        }
    }

    public static void TestInput() {
        // 1,创建文件对象
        File file = new File("D:\\fiction\\mulu.txt"); // 创建文件对象
        try {
            // 创建FileInputStream类对象
            // 2,通过文件对象,初始化输入流
            FileInputStream in = new FileInputStream(file);
            byte byt[] = new byte[1024]; // 创建byte数组
            // 3,操作流,从文件中读取
            int len = in.read(byt); // 从文件中读取信息
            // 将文件中信息输出
            System.out.println("重磅推荐小说目录:\n" + new String(byt, 0, len));

            // 4,关闭流
            in.close(); // 关闭流
        } catch (Exception e) {
            e.printStackTrace(); // 输出异常信息
        }
    }

    public static void writeFile(File f) {
        try {

            FileOutputStream fop = new FileOutputStream(f);
            // 构建FileOutputStream对象,文件不存在会自动新建

            OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
            // 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk

            System.out.println("下面开始输入小说内容吧:");
            Scanner scan = new Scanner(System.in);
            while (scan.hasNext()) {

                // nextline,next()只读取第一个字符串,空格不能读取
                // String str1 = scan.next();
                // 对比 nextLine有什么差异,读取一行可以读取空格
                String str2 = scan.nextLine();

                // 注意字符串内容的比较
                if (str2.equals("quit")) {
                    System.out.println("-----书写完毕,退出------");
                    writer.close();
                    // 关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉

                    fop.close();
                    // 关闭输出流,释放系统资源
                    break;
                } else {
                    writer.append(str2);
                    writer.append("\r\n");
                    System.out.println("------输入的内容为:" + str2);
                }
                System.out.println("请您继续输入内容:");

            }
            scan.close();
            // writer.append("我是浩瀚沙海中的一粒沙");
            // // 写入到缓冲区

            // writer.append("\r\n");
            // // 换行

            // writer.append("蓝色星球I am here");
            // // 刷新缓存冲,写入到文件,如果下面已经没有写入的内容了,直接close也会写入

        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public static void readFile() {
        try {

            System.out.println("请输入您想查看的小说名:");
            Scanner sc = new Scanner(System.in);
            String str3 = sc.nextLine();
            String dirname = "D:\\fiction\\";
            File f2 = new File(dirname + str3 + ".txt");
            System.out.println("-------下面是小说《" + str3 + "》的内容:");
            FileInputStream fip = new FileInputStream(f2);
            // 构建FileInputStream对象

            InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
            // 构建InputStreamReader对象,编码与写入相同

            StringBuffer sb = new StringBuffer();
            while (reader.ready()) {
                sb.append((char) reader.read());
                // 转成char加到StringBuffer对象中
            }
            System.out.println(sb.toString());
            reader.close();
            // 关闭读取流

            fip.close();
            // 关闭输入流,释放系统资源

        } catch (Exception e) {
            // TODO: handle exception
        }

    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值