黑马程序员技术交流社区
标题:
这个题目怎么做?
[打印本页]
作者:
天蝎降降温
时间:
2014-10-17 17:15
标题:
这个题目怎么做?
键盘录入学生的语文,数学,英语成绩。按照总分排序从高到下写入文本中。
作者:
哈达洋
时间:
2014-10-17 17:29
采用TreeMap集合。里面存储键为学生对象,值为总分。
作者:
哈达洋
时间:
2014-10-17 17:30
采用TreeMap集合。里面存储键为学生对象,值为总分。学生对象要实现comparable接口。
作者:
付江涛
时间:
2014-10-17 18:38
伸手党,视频里貌似讲过这个吧 = =
作者:
刘家斌
时间:
2014-10-17 22:31
最近一直在敲博客,实在不想敲代码了。。。
作者:
liu951753xz
时间:
2014-10-17 23:40
视频要认真看,代码要认真敲,懂
作者:
戏言丶
时间:
2014-10-18 00:42
仅供参考,注释懒的写了
import java.io.*;
import java.util.*;
class Student implements Comparable
{
private String name;
private int math;
private int cn;
private int en;
private int score;
Student(String name,int math,int cn,int en)
{
this.name = name;
this.math = math;
this.cn = cn;
this.en = en;
}
public int getScore()
{
return math + cn + en ;
}
public String toString()
{
return name+"\t"+math+"\t"+cn+"\t"+en;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Student))
throw new ClassCastException("不是学生对象");
Student s = (Student)obj;
return s.name.equals(this.name)&&s.getScore()==this.getScore();
}
public int compareTo(Object obj)
{
Student s = (Student)obj;
int num = new Integer(s.getScore()).compareTo(new Integer(this.getScore()));
if (num==0)
return this.name.compareTo(s.name);
return num;
}
}
class Stu
{
public static void main(String[] args)
{
inputInfo();
}
public static void inputInfo()
{
TreeSet<Student> ts = new TreeSet<Student>();
BufferedReader bufr = null;
BufferedWriter bufw = null;
try
{
bufr = new BufferedReader(new InputStreamReader(System.in));
bufw = new BufferedWriter(new FileWriter("stud.txt"));
String len = null;
while ((len=bufr.readLine())!=null)
{
if("over".equals(len))
break;
String[] s = len.split(",");
ts.add(new Student(s[0],Integer.parseInt(s[1]),Integer.parseInt(s[2]),Integer.parseInt(s[3])));
}
Iterator<Student> it = ts.iterator();
int score = 0;
bufw.write("姓名\t数学\t语文\t英语\t总分");
bufw.newLine();
while (it.hasNext())
{
Student s = it.next();
score = s.getScore();
bufw.write(s.toString()+"\t"+score);
bufw.newLine();
}
}
catch (IOException e)
{
throw new RuntimeException("录入失败!");
}
finally
{
try
{
if(bufw!=null)
bufw.close();
}
catch (IOException e)
{
throw new RuntimeException("关闭写入流失败!");
}
try
{
if(bufr!=null)
bufr.close();
}
catch (IOException e)
{
throw new RuntimeException("关闭读取流失败!");
}
}
}
}
复制代码
作者:
mingtianrsm
时间:
2014-10-18 09:13
这是我写的,你可以参考一下
复制代码
作者:
mingtianrsm
时间:
2014-10-18 09:15
额,咋没了呢
package com.itheima;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
public class Text4 {
/**
* 第4题 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
* 输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到
* 一个名称"stu.txt"文件中。要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//创建ArrayList对象,用来存放学生对象
ArrayList<Student> list = new ArrayList<Student>();
list = getStudentsList();
//创建输出缓冲区,用来将得到的学生信息写入stu.txt文件中
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("stu.txt")));
for(int i = 0; i < list.size(); i ++) {
String str = list.get(i).toString();
bufw.write(str);
bufw.newLine();
bufw.flush();
}
bufw.close();
}
//定义方法,对存放学生的ArrayList按照学生总成绩排序
public static void sort(ArrayList<Student> list) {
Student temp = null;
for(int i = 0; i < list.size()-1; i ++) {
for(int j = i+1; j < list.size(); j ++) {
if(list.get(i).getSum() < list.get(j).getSum()) {
temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
}
System.out.println(""+i+j);
}
}
}
//定义方法,将键盘输入的学生对象存储到ArrayList列表中,并返回该列表
public static ArrayList<Student> getStudentsList() throws IOException {
System.out.println("请按照格式输入学生信息:注意学生成绩精确到小数点后一位");
System.out.println("格式:学生名,语文成绩,数学成绩,英语成绩;其中,为英文,");
//创建ArrayList对象,用来存放学生对象
ArrayList<Student> list = new ArrayList<Student>();
//创建输入缓冲区,用来就收键盘输入的学生信息
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
//定义正则规则,用来限制输入的学生信息的格式
String str = "((\\w+)|([\\u4e00-\\u9fa5]+))(,((\\d{1,3})|(\\d{1,2}\\.\\d{1}))){3}";
while((line = bufr.readLine()) != null) {
if("over".equals(line)) {
break;
}
if(!line.matches(str)) {
System.out.println("对不起,您输入的格式不正确,请重新输入!");
}else {
//通过split方法,将学生的信息提取处理
String name = line.split(",")[0];
double chineseScore = Double.parseDouble(line.split(",")[1]);
double mathsScore = Double.parseDouble(line.split(",")[2]);
double englishScore = Double.parseDouble(line.split(",")[3]);
//创建与输入信息对应的学生对象
Student stu = new Student(name, chineseScore, mathsScore, englishScore);
//将学生对象添加到list中
list.add(stu);
}
}
bufr.close();
sort(list);//对list按照学生成绩进行排序
return list;
}
}
/*
* 定义学生类
*/
class Student {
//定义学生类属性
private String name;//学生姓名
private double chineseScore;//语文成绩
private double mathsScore;//数学成绩
private double englishScore;//英语成绩
//定义构造函数
public Student(String name, double chineseScore, double mathsScore,
double englishScore) {
this.name = name;
this.chineseScore = chineseScore;
this.mathsScore = mathsScore;
this.englishScore = englishScore;
}
//定义对学生类属性进行操作的方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getChineseScore() {
return chineseScore;
}
public void setChineseScore(int chineseScore) {
this.chineseScore = chineseScore;
}
public double getMathsScore() {
return mathsScore;
}
public void setMathsScore(int mathsScore) {
this.mathsScore = mathsScore;
}
public double getEnglishScore() {
return englishScore;
}
public void setEnglishScore(int englishScore) {
this.englishScore = englishScore;
}
//定义方法,获得该学生的总成绩。
public double getSum() {
return chineseScore + mathsScore + englishScore;
}
//用重写的方式,自定义toString方法
@Override
public String toString() {
return name + ", \t" + chineseScore + ", \t" + mathsScore + ", \t" + englishScore;
}
}
复制代码
作者:
天蝎降降温
时间:
2014-10-18 13:33
liu951753xz 发表于 2014-10-17 23:40
视频要认真看,代码要认真敲,懂
问你一个问题,继承Thread类,与是先Runnablejie接口哪个更好,占用资源最少?
作者:
天蝎降降温
时间:
2014-10-18 13:39
liu951753xz 发表于 2014-10-17 23:40
视频要认真看,代码要认真敲,懂
还有一个也不懂,这个也不是敲代码的问题,线程同步时,比如转账操作,为什么两个线程操作时会产生钱总数的误差错误,比如转出两百,转入两百,变化的仍是两百,最后总数却有误差,明明总数是一个变量,只是存的时候被中断了,却产生了误差,意思是操作的是一个变量,怎么会这样,求指教,谢谢。ps:这个不是伸手党,只是个疑惑而已。
作者:
Franklin
时间:
2014-10-18 13:45
学习一下。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2