黑马程序员技术交流社区
标题:
花了两个小时写的大家帮补补足
[打印本页]
作者:
马云
时间:
2012-3-23 17:03
标题:
花了两个小时写的大家帮补补足
本帖最后由 马云 于 2012-3-23 17:05 编辑
/*
有五个学生,每个学生有3门课的成绩
从键盘输入以上数据(包括姓名,三门课成绩)
输入的格式:如:zhangsan,30,40,60计算出总成绩,
并把学生的信息和计算出的总分数高低顺序存放在磁盘文件"stud.txt"中。
1)描述学生对象
2)定义一个可操作学生对象的工具类
思想:
1,通过获取键盘录入一行数据,并将该行中的信息取出封装成学生对象。
2。因为学生有很多,那么就需要存储,使用到集合,因为要对学生的总分排序。所以可以使用treeSet
3,将集合的信息写入到一个文件中
*/
Student.java
package demo;
public class Student implements Comparable<Student>{
String name;
int chiaeseSco;
int math;
int english;
public Student(String name,int chia,int math,int eng){
this.name=name;
this.chiaeseSco=chia;
this.math=math;
this.english=eng;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getChiaeseSco() {
return chiaeseSco;
}
public void setChiaeseSco(int chiaeseSco) {
this.chiaeseSco = chiaeseSco;
}
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 String toString() {
return "name:"+name+" chiaeseSco:"+chiaeseSco+" math:"+math+" english:"+english+" sum"+this.scoSum();
}
public int scoSum(){
return chiaeseSco+math+english;
}
public int compareTo(Student o) {
int num=o.scoSum()-this.scoSum();
if(num==0){
return this.getName().compareTo(o.getName());
}
return num;
}
}
/*
有五个学生,每个学生有3门课的成绩
从键盘输入以上数据(包括姓名,三门课成绩)
输入的格式:如:zhangsan,30,40,60计算出总成绩,
并把学生的信息和计算出的总分数高低顺序存放在磁盘文件"stud.txt"中。
1)描述学生对象
2)定义一个可操作学生对象的工具类
思想:
1,通过获取键盘录入一行数据,并将该行中的信息取出封装成学生对象。
2。因为学生有很多,那么就需要存储,使用到集合,因为要对学生的总分排序。所以可以使用treeSet
3,将集合的信息写入到一个文件中
*/
复制代码
IOexample.java
package demo;
import java.io.*;
import java.util.TreeSet;
public class IOexample {
public static void main(String[] args) {
BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));
TreeSet<Student> stus=new TreeSet<Student>();
String data=null;
Student stu=null;
try {
while((data=bfr.readLine())!=null){
if(!data.equals("")){
if(data.equals("over")){
//此入如果输入over将集合的数据写入到文件流
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("student.file"));
for(Student s:stus){
oos.writeObject(s);
}
}else{
stu=split(data);
stus.add(stu);
data=null;
}
}else{
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
//切割传入的字符串对象,返回一个Student对象
static Student split(String str){
String name = "";
int chiaeseSco = 0;
int math = 0;
int english = 0;
if(validata(str)==3){
str=trimAll(str);
String[] tempStu=str.split(",");
//转换Student字符串对象
if(tempStu.length==4){
name=tempStu[0];
chiaeseSco=Integer.parseInt(tempStu[1]);
math=Integer.parseInt(tempStu[2]);
english=Integer.parseInt(tempStu[3]);
return new Student(name,chiaeseSco,math,english);
}else{
return null;
}
}
return null;
}
//删除所有输入的空格(Ok没问题)
static String trimAll(String str){
char[] ch=str.toCharArray();
StringBuilder sb=new StringBuilder();
for(int i=0;i<str.length();i++){
if(ch[i]!=' '){
sb.append(ch[i]);
}
}
return sb.toString();
}
//校验格式(OK没有问题)
static int validata(String str){
char[] ch=str.toCharArray();
int count=0;
for(int i=0;i<str.length();i++){
if(ch[i]==','){//使用逗号split
count++;
}
}
return count;
}
}
复制代码
那里不足的地方大家一块论论啊!
异常基本都没有处理,大家改的就在后边跟贴吧!!!
作者:
马云
时间:
2012-3-23 17:29
不能沉了啊!
作者:
liumeng
时间:
2012-3-23 17:35
student.file 贴出来
作者:
马云
时间:
2012-3-23 18:13
liumeng 发表于 2012-3-23 17:35
student.file 贴出来
你运行下就有了,我的在公司电脑上了。
作者:
欧阳博
时间:
2012-3-23 19:10
这个题既然是获取键盘录入生成对象,那么set、get方法可以不用,而且你上面用到ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("student.file")); 你需要序列化对象吗? 题目只是说让以高到底存入到txt文件中, 还有你需要把Student对象存入集合中,以实现排序,那么你必须在这个Student重写equals和hashcode方法。来判断存入的对象是否有重复,应该实现姓名和各科成绩相同就作为同一个人。
作者:
马云
时间:
2012-3-23 20:32
有public int compareTo(Student o) {
45.
46. int num=o.scoSum()-this.scoSum();
47. if(num==0){
48. return this.getName().compareTo(o.getName());
49. }
50. return num;
51. }
作者:
马强
时间:
2012-3-24 08:00
异常是一定要有地
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2