欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java使用Comparable解决排序问题

程序员文章站 2024-03-04 20:27:06
本文实例讲述了java使用comparable解决排序问题的方法。分享给大家供大家参考。具体实现方法如下: 一次举重竞赛的比赛规则是:选手的成绩以成功举起的总重量来排序,...

本文实例讲述了java使用comparable解决排序问题的方法。分享给大家供大家参考。具体实现方法如下:

一次举重竞赛的比赛规则是:选手的成绩以成功举起的总重量来排序,举起总重量多的排在前面;当举起总重量相同时,按照体重来排序,体重轻的排在前面;要求程序读取数据文件作为输入,并按照上述规则排序后,打印出选手编号;数据文件说明如下:现有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程序设计有所帮助。