作业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
}
}
}