반응형

 

문제

 

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();
		}
	}
}

 

결과 화면

 

 

반응형