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程序设计有所帮助。
推荐阅读
-
Java使用Comparable解决排序问题
-
Python使用回溯法子集树模板解决迷宫问题示例
-
java 使用ImageIO.writer从BufferedImage生成jpeg图像遇到问题总结及解决
-
Java中FTPClient上传中文目录、中文文件名乱码问题解决方法
-
El表达式使用问题javax.el.ELException:Failed to parse the expression的解决方式
-
Android中NavigationView的使用与相关问题解决
-
ASP.NET中UpdatePanel与jQuery同时使用所遇问题解决
-
解决Django模板无法使用perms变量问题的方法
-
Ubuntu更新后鼠标无法使用解决 博客分类: 程序问题记录 ubuntu鼠标无法使用
-
使用asp.net的pageDataSource中时索引问题解决方法