【Java作业】2017.11.25 / 11.26

来源:互联网 发布:为什么app连不上网络 编辑:程序博客网 时间:2024/06/05 18:40

作业一:已知s.txt文件中有这样的一个字符串:“hcexfgijkamdnoqrzstuvwybpl”请编写程序读取数据内容,把数据排序后写入ss.txt中。


方式1:使用高效字符流,一次读取一个字符
/* * 需求: *  已知s.txt文件中有这样的一个字符串:“hcexfgijkamdnoqrzstuvwybpl” * 请编写程序读取数据内容,把数据排序后写入ss.txt中 * */import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;public class Test {public static void main(String[] args) throws IOException {// 创建字符输入流对象BufferedReader br = new BufferedReader(new FileReader("s.txt"));// 创建字符输出流对象BufferedWriter bw = new BufferedWriter(new FileWriter("ss.txt"));// 创建ArrayList集合对象ArrayList<Character> al = new ArrayList<Character>();// 使用高效字符输入流获取int ch = 0;while ((ch = br.read()) != -1) {// 添加至集合中al.add((char) ch);}// 遍历集合并排序for (int i = 0; i < al.size() - 1; i++) {for (int j = 0; j < al.size() - i - 1; j++) {char c1 = al.get(j);char c2 = al.get(j + 1);if (c1 > c2) {al.set(j, c2);al.set(j + 1, c1);}}}// 将集合转为Character型数组Character[] chs = al.toArray(new Character[al.size()]);for (int i = 0; i < chs.length; i++) {// 将Character对象转换为char类型char c = chs[i].charValue(); // public char charValue() 返回此对象的基本char值// 将字符使用输出流写入ss.txt文件中bw.write(c);// 刷新流bw.flush();}// 释放资源br.close();bw.close();}}



方法2:使用高效字符流,一次读取一行
/* * 需求: *  已知s.txt文件中有这样的一个字符串:“hcexfgijkamdnoqrzstuvwybpl” * 请编写程序读取数据内容,把数据排序后写入ss.txt中 * */import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.Arrays;public class Homework4 {public static void main(String[] args) throws IOException {// 创建字符输入流对象BufferedReader br = new BufferedReader(new FileReader("s.txt"));// 创建字符输出流对象BufferedWriter bw = new BufferedWriter(new FileWriter("ss.txt"));// 使用高效字符输入流获取String str = br.readLine();//转为字符数组char [] chs = str.toCharArray();//使用Arrays类中的sort()方法进行排序Arrays.sort(chs);//使用输出流写入ss.txt中bw.write(chs);//刷新流bw.flush();//释放资源br.close();bw.close();}}


结果:















作业二:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低存入文本文件


方式1:使用TreeSet集合的比较器排方法
/* * 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低存入文本文件 * */import java.util.Scanner;import java.util.TreeSet;import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;import java.util.Comparator;public class Homework6 {public static void main(String[] args) throws IOException {// 创建TreeSet集合对象TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {@Overridepublic int compare(Student s1, Student s2) {// 比较总分按从高到低int num1 = s2.getSum() - s1.getSum();// 若总分相同比较语文成绩int num2 = num1 == 0 ? s2.getChinese() - s1.getChinese() : num1;// 总分相同,语文成绩也相同则比较数学成绩int num3 = num2 == 0 ? s2.getMath() - s1.getMath() : num2;// 总分相同,所有科目成绩也相同,则比较姓名int num4 = num3 == 0 ? s2.getName().compareTo(s1.getName()) : num3;return num4;}});System.out.println("请录入学生信息:");// 创建键盘录入对象,分别录入五个学生的信息for (int i = 1; i <= 5; i++) {// 创建键盘录入对象Scanner sc = new Scanner(System.in);System.out.println("请输入第" + i + "位学生姓名:");String name = sc.nextLine();System.out.println("请输入第" + i + "位学生的语文成绩:");String chinese = sc.nextLine();System.out.println("请输入第" + i + "位学生的数学成绩:");String math = sc.nextLine();System.out.println("请输入第" + i + "位学生的英语成绩:");String english = sc.nextLine();// 将这些信息封装到学生对象中Student student = new Student();student.setName(name);student.setChinese(Integer.parseInt(chinese));student.setMath(Integer.parseInt(math));student.setEnglish(Integer.parseInt(english));// 将学生对象添加至集合中ts.add(student);}System.out.println("学生信息录入结束!");// 创建输出流对象BufferedWriter bw = new BufferedWriter(new FileWriter("学生成绩.txt"));/* * 此种方式错误,不能用此种方式转换,否则会出现类转换异常 *  * // 将TreeSet集合转为数组 Object[] objs = ts.toArray(); char[] chs = new char[1024]; * for (int i = 0; i < objs.length; i++) { chs[i] = (char) objs[i]; } //写入数据 * bw.write(chs); // 刷新流 bw.flush(); *  */// 写入数据bw.write("五位学生的信息如下:");bw.newLine();bw.write("姓名\t\t\t语文\t\t数学\t\t英语");bw.newLine();// 刷新资源bw.flush();// 使用增强for遍历集合for (Student s : ts) {// 创建StringBuilder对象StringBuilder sb = new StringBuilder();sb.append(s.getName() + "\t\t").append(s.getChinese() + "\t\t").append(s.getMath() + "\t\t").append(s.getEnglish());// 将StringBuilder对象转换为字符String str = sb.toString();// 用输出流写入bw.write(str);// 换行bw.newLine();// 刷新流bw.flush();}// 释放资源bw.close();}}// 学生类class Student {// 定义四个变量private String name;private int chinese;private int math;private int english;// 有参和无参构造public Student() {super();}public Student(String name, int chinese, int math, int english) {super();this.name = name;this.chinese = chinese;this.math = math;this.english = english;}// set和get方法获取变量public String getName() {return name;}public void setName(String name) {this.name = name;}public int getChinese() {return chinese;}public void setChinese(int chinese) {this.chinese = chinese;}public int getMath() {return math;}public void setMath(int math) {this.math = math;}public int getEnglish() {return english;}public void setEnglish(int english) {this.english = english;}// 获取总分的方法public int getSum() {return this.chinese + this.math + this.english;}}





方式2:使用TreeSet集合的自然排序方法
/* * 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低存入文本文件 * */import java.util.Scanner;import java.util.TreeSet;import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;public class Homework6 {public static void main(String[] args) throws IOException {// 创建TreeSet集合对象TreeSet<Student> ts = new TreeSet<Student>();//提示信息System.out.println("请录入学生信息:");// 创建键盘录入对象,分别录入五个学生的信息for (int i = 1; i <= 5; i++) {// 创建键盘录入对象Scanner sc = new Scanner(System.in);System.out.println("请输入第" + i + "位学生姓名:");String name = sc.nextLine();System.out.println("请输入第" + i + "位学生的语文成绩:");String chinese = sc.nextLine();System.out.println("请输入第" + i + "位学生的数学成绩:");String math = sc.nextLine();System.out.println("请输入第" + i + "位学生的英语成绩:");String english = sc.nextLine();// 将这些信息封装到学生对象中Student student = new Student();student.setName(name);student.setChinese(Integer.parseInt(chinese));student.setMath(Integer.parseInt(math));student.setEnglish(Integer.parseInt(english));// 将学生对象添加至集合中ts.add(student);}System.out.println("学生信息录入结束!");// 创建输出流对象BufferedWriter bw = new BufferedWriter(new FileWriter("学生成绩.txt"));/* * 此种方式错误,不能用此种方式转换,否则会出现类转换异常 *  * // 将TreeSet集合转为数组 Object[] objs = ts.toArray(); char[] chs = new char[1024]; * for (int i = 0; i < objs.length; i++) { chs[i] = (char) objs[i]; } //写入数据 * bw.write(chs); // 刷新流 bw.flush(); *  */// 写入数据bw.write("五位学生的信息如下:");bw.newLine();bw.write("姓名\t\t\t语文\t\t数学\t\t英语");bw.newLine();// 刷新资源bw.flush();// 使用增强for遍历集合for (Student s : ts) {// 创建StringBuilder对象StringBuilder sb = new StringBuilder();sb.append(s.getName() + "\t\t").append(s.getChinese() + "\t\t").append(s.getMath() + "\t\t").append(s.getEnglish());// 将StringBuilder对象转换为字符String str = sb.toString();// 用输出流写入bw.write(str);// 换行bw.newLine();// 刷新流bw.flush();}// 释放资源bw.close();}}// 学生类class Student implements Comparable<Student> {// 定义四个变量private String name;private int chinese;private int math;private int english;// 有参和无参构造public Student() {super();}public Student(String name, int chinese, int math, int english) {super();this.name = name;this.chinese = chinese;this.math = math;this.english = english;}// set和get方法获取变量public String getName() {return name;}public void setName(String name) {this.name = name;}public int getChinese() {return chinese;}public void setChinese(int chinese) {this.chinese = chinese;}public int getMath() {return math;}public void setMath(int math) {this.math = math;}public int getEnglish() {return english;}public void setEnglish(int english) {this.english = english;}// 获取总分的方法public int getSum() {return this.chinese + this.math + this.english;}@Overridepublic int compareTo(Student s) {// 比较总分按从高到低int num1 = s.getSum() - this.getSum();// 若总分相同比较语文成绩int num2 = num1 == 0 ? s.getChinese() - this.getChinese() : num1;// 总分相同,语文成绩也相同则比较数学成绩int num3 = num2 == 0 ? s.getMath() - this.getMath() : num2;// 总分相同,所有科目成绩也相同,则比较姓名int num4 = num3 == 0 ? s.getName().compareTo(this.getName()) : num3;return num4;}}

结果:

原创粉丝点击