Java Comparable 解决排序问题

原创 2012年03月30日 16:18:11
一次举重竞赛的比赛规则是:选手的成绩以成功举起的总重量来排序,举起总重量多的排在前面;当举起总重量相同时,按照体重来排序,体重轻的排在前面;要求程序读取数据文件作为输入,并按照上述规则排序后,打印出选手编号;数据文件说明如下:现有5名选手,其选手编号、成功举起的总重量及其体重如数据文件data4.txt,样例内容为:

<p>
<no>1</no>
<lw>140</lw>
<bw>54</bw>
</p>
<p>
<no>2</no>
<lw>155</lw>
<bw>53</bw>
   </p>
<p>
<no>3</no>
<lw>140</lw>
<bw>42</bw>
   </p>
<p>
<no>4</no>
<lw>140</lw>
<bw>55</bw>
   </p>
<p>
<no>5</no>
<lw>130</lw>
<bw>46</bw>

   </p>

首先我要解决的是文件解析的问题:

如何把文件内容解析成想要的数据:即提取出每个选手的编号,成绩和体重

我用一个实体Person来封装这些属性

整体代码:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;




public class forth {



public static void main(String[] args) {
ArrayList<Person> list=new ArrayList<Person>();
try {
FileReader fr=new FileReader("c:\\data.txt");
BufferedReader br=new BufferedReader(fr);
String str=null;
int num=0;
int score=0;
int weight=0;
int i=0;
while((str=br.readLine())!=null)
{
   i++;
   if(i%5==2)
   {
str=str.trim().substring(4,str.length()-5);
num=Integer.parseInt(str);

str=br.readLine().trim();
str=str.substring(4,str.length()-5);
score=Integer.parseInt(str);
i++;

str=br.readLine().trim();
str=str.substring(4,str.length()-5);
weight=Integer.parseInt(str);
i++;

Person p=new Person(num,score,weight);
list.add(p);
   }
   else 
    continue;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
Person[] plist=new Person[list.size()];
list.toArray(plist);
Arrays.sort(plist);
for(int i=0;i<plist.length;i++)
{
System.out.print(plist[i].getNum()+".  " +plist[i].getScore()+"  "+plist[i].getWeight()+"\n\r");
}


}


}
class Person implements Comparable<Person>{


private int num;
private int weight;
private int score;

public Person(int num,int score,int weight){
this.num=num;
this.score=score;
this.weight=weight;

}
@Override
public int compareTo(Person other) {
if(this.score>other.score)return -1;
    else if(this.score<other.score) return 1;
    else
    return this.weight>other.weight?1:-1;
}


public int getNum() {
return num;
}


public void setNum(int num) {
this.num = num;
}


public int getWeight() {
return weight;
}


public void setWeight(int weight) {
this.weight = weight;
}


public int getScore() {
return score;
}


public void setScore(int score) {
this.score = score;
}




}

java排序Comparator和Comparable

  • 2015年09月21日 22:18
  • 6KB
  • 下载

Java编程之TreeSet排序两种解决方法(1)元素自身具备比较功能,元素需要实现Comparable接口覆盖compare(2)创建根据自定义Person类的name进行排序的Comparator

TreeSet还具有可以对集合中的元素进行指定顺序的排序的功能。 这个功能实现的基本原理就是,当存放元素的时候进行比较,比较之后再存入。对于普通的字符串它可以完美的实现排序功能,但当是自定义类的时候就...

java中对集合或数组进行排序有两种方法:Comparable 与 Comparator

java中对集合或数组进行排序有两种方法:Comparable 与 Comparator

Comparable与Comparator,java中的排序与比较

1:比较和排序的概念     比较:两个实体类之间按>,=,     排序:在集合类中,对集合类中的实体进行排序。排序基于的算法基于实体类提供的比较函数。     基本型别都提供了默认的比较算法...
  • luminji
  • luminji
  • 2017年08月09日 11:39
  • 219

java集合中对象某属性比较排序Comparable与Comparator

要对集合中的对象的某属性进行排序有两种方式。 a. 一种是要排序对象类实现comparable接口的compareTo方法;然后把对象放入list;然后调用Collections.sort(list...

java类自定义实现类排序实现(Comparable或者额外类实现Comparator)

1.自身类实现Comparable接口,重写public int compareTo(Object obj) {}方法 0 相等   正数   this > obj   负数 this 然后加入...

Java之美之Comparator和Comparable在排序中的应用

当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。 阅读过程中有任何问题,请联系egg: 邮箱:xtf...

Java核心技术之Comparator和Comparable在排序中的应用

参考资料: 1.

java使用Comparator与Comparable接口对对象排序

编程中可能常常要对一个对象数组排序,对象中往往都有多个属性,一般使用中会对对象按其中的某一个属性值排序,实现按其中一个属性排序的方式有多中,最最直接的就是直接在写排序算法的时候用对象中的一个属性值做比...

Java之Comparator和Comparable在排序中的应用

Java之Comparator和Comparable在排序中的应用 当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排...
  • zolalad
  • zolalad
  • 2013年12月02日 12:47
  • 1095
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java Comparable 解决排序问题
举报原因:
原因补充:

(最多只允许输入30个字)