반응형
문제
10마리의 말들이 경주하는 경마 프로그램 작성하기
말은 Horse라는 이름의 클래스로 구성하고, 이 클래스는 말이름(String), 등수(int)를 멤버변수로 갖는다.
그리고, 이 클래스에는 등수를 오름차순으로 처리할 수 있는 기능이 있다.
( Comparable 인터페이스 구현)
경기 구간은 1~50구간으로 되어 있다.
경기 중 중간중간에 각 말들의 위치를 >로 나타내시오.
예)
1번말 --->------------------------------------
2번말 ----->----------------------------------
...
정답
package kr.or.ddit.basic.HomeWork;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class HomeWork5 {
/*
10마리의 말들이 경주하는 경마 프로그램 작성하기
말은 Horse라는 이름의 클래스로 구성하고,
이 클래스는 말이름(String), 등수(int)를 멤버변수로 갖는다.
그리고, 이 클래스에는 등수를 오름차순으로 처리할 수 있는
기능이 있다.( Comparable 인터페이스 구현)
경기 구간은 1~50구간으로 되어 있다.
경기 중 중간중간에 각 말들의 위치를 >로 나타내시오.
예)
1번말 --->------------------------------------
2번말 ----->----------------------------------
...
경기가 끝나면 등수를 기준으로 정렬하여 출력한다.
*/
static int CurrRank = 1;
public static void main(String[] args) {
List<Horse> horseList = new ArrayList<Horse>();
for(int i=0; i<10; i++) {
horseList.add(new Horse( (i+1) + "번말"));
}
Location lo = new Location(horseList);
lo.setDaemon(true);
lo.start();
System.out.println("경기 시작...");
for (Horse ho : horseList) {
ho.start();
}
for (Horse ho : horseList) {
try {
ho.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Collections.sort(horseList);
System.out.println("경기 끝...");
System.out.println("--------------------------------");
System.out.println("경 기 결 과");
System.out.println();
System.out.println("================================");
System.out.println("순위\t:\t이름");
System.out.println("--------------------------------");
for (Horse ho : horseList) {
System.out.println(ho.getRank() + "\t:\t" + ho.getName());
}
}
}
class Horse extends Thread implements Comparable<Horse>{
private String name;
private int rank;
private int loc;
public Horse(String name) {
super(name);
this.name = name;
}
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
public int getLoc() {
return loc;
}
public void setLoc(int i) {
this.loc = i;
}
@Override
public void run() {
for(int i=0; i<50; i++) {
setLoc(i);
try {
Thread.sleep((int)(Math.random()*501+500));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
setRank(HomeWork5.CurrRank++);
}
// 순위
@Override
public int compareTo(Horse h) {
return new Integer(getRank()).compareTo(h.getRank());
}
}
class Location extends Thread {
private List<Horse> horseList = new ArrayList<Horse>();
public Location(List<Horse> horseList) {
this.horseList = horseList;
}
@Override
public void run() {
while(true) {
try {
Thread.sleep(1200);
} catch (InterruptedException e) {
e.printStackTrace();
}
for(int i=0; i<10; i++) {
Horse ho = horseList.get(i);
System.out.print(ho.getName() + "\t");
for(int j = 0; j<50; j++) {
if(ho.getLoc() == j) {
System.out.print(">");
} else {
System.out.print("-");
}
}
System.out.println();
}
System.out.println();
}
}
}
반응형
'자바' 카테고리의 다른 글
[Java 고급] 13장 스트림 클래스 (1) | 2024.01.31 |
---|---|
[Java 고급] 12장 File 객체 (0) | 2024.01.30 |
[Java 고급] 11장 동기화, Lock 객체, Collection 클래스 동기화 처리, wait() & notify() (0) | 2024.01.29 |
[Java 고급] 10장 Thread상태, Thread 예시2 (1) | 2024.01.29 |
[Java 고급] 9장 Process와 Thread 예시1 (1) | 2024.01.27 |