本文实例讲述了Java使用Comparable解决排序问题的方法。分享给大家供大家参考。具体实现方法如下:
一次举重竞赛的比赛规则是:选手的成绩以成功举起的总重量来排序,举起总重量多的排在前面;当举起总重量相同时,按照体重来排序,体重轻的排在前面;要求程序读取数据文件作为输入,并按照上述规则排序后,打印出选手编号;数据文件说明如下:现有5名选手,其选手编号、成功举起的总重量及其体重如数据文件data4.txt,样例内容为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
< 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来封装这些属性
整体代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
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程序设计有所帮助。