各位大神们,这道面试题有更精简的算法吗?感觉自己写了好多行。。。

qq_29448025 2017-05-04 01:08:04
...全文
305 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ichavin 2017-05-04
  • 打赏
  • 举报
回复
mark 思路跟楼主一样 没别的好办法
爱摸鱼de老邪 2017-05-04
  • 打赏
  • 举报
回复
科目独立出来成立一个类,学生类里用一个科目类链表
qq_29448025 2017-05-04
  • 打赏
  • 举报
回复
感觉自己设计的Stud类的属性、和算法都有可优化的空间,但不知从何下手。
qq_29448025 2017-05-04
  • 打赏
  • 举报
回复
我自己写的代码如下:
class Stud {
	private String name;	//学生
	private String c1_name; //科目1名称
	private int c1_score; //科目1分数
	private String c2_name; //科目2名称
	private int c2_score; //科目2分数
	private String c3_name; //科目3名称
	private int c3_score; //科目3分数
	private String c4_name; //科目4名称
	private int c4_score; //科目4分数
	private int total;  //总分
	private double avg; //平均分
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getC1_name() {
		return c1_name;
	}
	public void setC1_name(String c1_name) {
		this.c1_name = c1_name;
	}
	public int getC1_score() {
		return c1_score;
	}
	public void setC1_score(int c1_score) {
		this.c1_score = c1_score;
	}
	public String getC2_name() {
		return c2_name;
	}
	public void setC2_name(String c2_name) {
		this.c2_name = c2_name;
	}
	public int getC2_score() {
		return c2_score;
	}
	public void setC2_score(int c2_score) {
		this.c2_score = c2_score;
	}
	public String getC3_name() {
		return c3_name;
	}
	public void setC3_name(String c3_name) {
		this.c3_name = c3_name;
	}
	public int getC3_score() {
		return c3_score;
	}
	public void setC3_score(int c3_score) {
		this.c3_score = c3_score;
	}
	public String getC4_name() {
		return c4_name;
	}
	public void setC4_name(String c4_name) {
		this.c4_name = c4_name;
	}
	public int getC4_score() {
		return c4_score;
	}
	public void setC4_score(int c4_score) {
		this.c4_score = c4_score;
	}
	public int getTotal() {
		return total;
	}
	public void setTotal(int total) {
		this.total = total;
	}
	public double getAvg() {
		return avg;
	}
	public void setAvg(double avg) {
		this.avg = avg;
	}
	public Stud() {
		// TODO Auto-generated constructor stub
	}
	public Stud(String name, String c1_name, int c1_score, String c2_name, int c2_score, String c3_name, int c3_score,
			String c4_name, int c4_score, int total, double avg) {
		super();
		this.name = name;
		this.c1_name = c1_name;
		this.c1_score = c1_score;
		this.c2_name = c2_name;
		this.c2_score = c2_score;
		this.c3_name = c3_name;
		this.c3_score = c3_score;
		this.c4_name = c4_name;
		this.c4_score = c4_score;
		this.total = total;
		this.avg = avg;
	}
	@Override
	public String toString() {
		return name + " " + c1_name + " " + c1_score + " " + c2_name
				+ " " + c2_score + " " + c3_name + " " + c3_score + " " + c4_name
				+ " " + c4_score + " " + total + " " + avg ;
	}
	
	
}

public class Stud_score {

	public static void main(String[] args) throws IOException {
		int n=0;   //n用来统计学生的人数
		List<Stud> list=new ArrayList<>();
		//用字节流打开文件student.txt
		FileInputStream fis=new FileInputStream("student.txt");
		//用转换流把字节流转换成字符流
		InputStreamReader isr=new InputStreamReader(fis);
		//转换成能够按行读取的字符流
		BufferedReader br=new BufferedReader(isr);
		String line=null;
		while( (line=br.readLine()) !=null){
			//将这一行学生数据拆分
			String[]t=line.split("\\s+");
			String name=t[0];	//学生
			String c1_name=t[1]; //科目1名称
			int c1_score=Integer.parseInt(t[2]); //科目1分数
			String c2_name=t[3]; //科目2名称
			int c2_score=Integer.parseInt(t[4]); //科目2分数
			String c3_name=t[5]; //科目3名称
			int c3_score=Integer.parseInt(t[6]); //科目3分数
			String c4_name=t[7]; //科目4名称
			int c4_score=Integer.parseInt(t[8]); //科目4分数
			int total=c1_score+c2_score+c3_score+c4_score;  //总分
			double avg=total/4.0; //平均分
			//生成一个学生对象
			Stud stud=new Stud(name, c1_name, c1_score, c2_name, c2_score, c3_name, c3_score, c4_name, c4_score, total, avg);
			//将这个学生对象加入集合
			list.add(stud);
			n++;  //人数加1
		}
		br.close();
		//按总分进行排序
		Collections.sort(list,new Comparator<Stud>() {

			@Override
			public int compare(Stud o1, Stud o2) {
				return o2.getTotal()-o1.getTotal();
			}
		});
		//按行写入文件student_score.txt
		PrintWriter pw=new PrintWriter("student_score.txt");
		for (Stud stud : list) {
			pw.println(stud);
		}
		pw.close();
		
		//对计算机科目按分数由高到低排序
		Collections.sort(list,new Comparator<Stud>() {

			@Override
			public int compare(Stud o1, Stud o2) {
				return o2.getC4_score()-o1.getC4_score();
			}
		});
		//将计算机分数写入文件,名字叫 计算机.txt
		pw=new PrintWriter("计算机.txt");
		double ave=0; //用来存放计算机科目的平均分
		for (Stud stud : list) {
			pw.println(stud.getName()+" "+stud.getC4_name()+" "+stud.getC4_score());
			ave=ave+stud.getC4_score();
		}
		ave=ave/n;  //计算出平均分
		pw.println("平均分:"+ave);
		pw.close();
	}
}

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧