Java는 Comparable을 사용하여 정렬 문제를 해결합니다.
3533 단어 JavaComparable정렬
한 차례의 역도 경기의 경기 규칙은 선수의 성적은 성공적으로 들어올린 총 무게로 순서를 정하고 총 무게가 많은 것을 들어올려 앞에 놓는다.총중량을 들어올리면 체중에 따라 순서를 정하고 체중이 가벼운 것이 앞에 선다.프로그램이 데이터 파일을 읽어 입력으로 하고 상기 규칙에 따라 정렬한 후 선수 번호를 출력하도록 요구한다.데이터 파일은 다음과 같이 설명한다. 현재 5명의 선수가 선수 번호, 성공적으로 들어올린 총 무게와 체중, 예를 들어 데이터 파일 데이터4.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()+"
\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;
}
}
본고에서 기술한 것이 여러분의 자바 프로그램 설계에 도움이 되기를 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.