Java使用Comparable解决排序问题

时间:2021-05-20

本文实例讲述了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;}@Overridepublic 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程序设计有所帮助。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章