| 本帖最后由 cc19930915 于 2016-5-10 00:15 编辑 
 Test4--有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
 
 如果有更好的解决方式,你可以发出来提供参考。
 
 PS:学生类没有写。
 
 
 复制代码public static void main(String[] args) {
//创建集合对象 传入比较器 
TreeSet<Student> set = new TreeSet<>(new Comparator<Student>() {
//重写compara方法
@Override
public int compare(Student o2, Student o1) {
int num = o1.getSum() - o2.getSum();
num = num == 0 ? o1.getChinese() - o2.getChinese() : num;
num = num == 0 ? o1.getMath() - o2.getMath() : num;
num = num == 0 ? o1.getEnglish() - o2.getEnglish() : num;
num = num == 0 ? o1.getName().compareTo(o2.getName()) : num;
return num;
}
});
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//信息提示
System.out.println("|请输入学生信息,输入格式为:name,30,30,30(姓名,三门课成绩)|");
System.out.println("| 注意:输入格式中的,为英文逗号,输入中文逗号无效,仅限添加五个成绩|");
//判断集合元素个数是否不等于5
while(set.size() != 5){
//录入字符串
String line = sc.nextLine();
//调用添加信息方法
addMessage(line,set);
}
//存储学生对象到指定文件
storeFile(set);
}
/*
* 存储集合元素
*/
private static void storeFile(TreeSet<Student> set) {
PrintStream ps = null;
//捕获异常
try {
//创建打印流对象
ps = new PrintStream(new FileOutputStream("stu.txt"),true);
//获取迭代器
Iterator<Student> it = set.iterator();
//循环判断
while(it.hasNext()){
//将对象写到文本文件中
ps.println(it.next());
}
} catch (IOException e) {
e.printStackTrace();
}finally{
//释放资源
ps.close();
}
}
/*
* 添加学生信息
*/
public static void addMessage(String str,TreeSet<Student> tree){
//声明姓名变量
String name;
//声明语文数学英语三个变量
int chinese,math,english;
//通过逗号分隔字符串
String[] arr = str.split(",");
//判断字符串数组的元素个数是否为4
if(arr.length != 4){
//不是4,那么就告知输入错误
System.out.println("学生信息录入错误,请重新输入");
//结束该方法
return;
//继续判断数组的元素是否有为空的
}else if(arr[0] == "" || arr[1] == "" || arr[2] == "" || arr[3] == ""){
//如果为为空的话,输出信息录入错误
System.out.println("学生信息录入错误,请重新输入");
//结束该方法
return;
}
//捕获异常
try {
//将数组索引1的值赋给chinese
chinese = Integer.parseInt(arr[1]);
//将数组索引2的值赋给math
math = Integer.parseInt(arr[2]);
//将数组索引3的值赋给english
english = Integer.parseInt(arr[3]);
//添加学生对象
tree.add(new Student(arr[0], chinese, math, english));
//添加成功 信息提示
System.out.println("您已成功添加,添加的信息为:" + "name:" + arr[0] + " chinese:" + chinese + " math:" + math + " english:" + english);
} catch (NumberFormatException e) {
//如果捕获到异常就信息提示
System.out.println("学生信息中的成绩请用数字输入");
//除了数字类型转换异常以外,可能还有其他的异常,所以再添加一个Exception
}catch(Exception e){
System.out.println("学生信息录入错误,请重新输入");
}
}
}
 |