package t6_Ex;
import java.util.Scanner;
class Horse extends Thread {
String horseName = "";
int bat = 0, cnt = 0;
int targetNum = 100; // 전체 완주거리
int sum = 0;
String[] finalHorse = new String[5];
public Horse(int bat, String horseName) {
this.bat = bat;
this.horseName = horseName;
}
@Override
public void run() {
StringBuffer sb = new StringBuffer();
String currentHorse = Thread.currentThread().getName(); //경주마 이름
while(true) {
sum += (int)(Math.random()*6) + 1;
if(sum < targetNum) { //경주중인 말
for(int i=0; i<sum; i++) sb.append(">");
System.out.println(currentHorse + "완주율 : " + sum + "% : " + sb);
}
else { // 완주한 말
sum = targetNum;
System.out.println(currentHorse + "완주율 : " + sum + "% : " + sb + "("+currentHorse+"도착)");
finalHorse[cnt] = currentHorse;
cnt++;
break;
}
try {Thread.sleep(500);} catch (InterruptedException e) {}
}
}
// 전체 순위와 배팅금액 계산하기
public void total() {
int money;
String horseRank;
System.out.println("====================결과====================");
for(int i=0; i<finalHorse.length; i++) {
System.out.println((i+1)+"등 : " + finalHorse[i]);
}
if(horseName.equals(finalHorse[0])) {
money = (int)(bat * 2.0);
horseRank = "1등";
}
else if(horseName.equals(finalHorse[1])) {
money = (int)(bat * 1.5);
horseRank = "2등";
}
else if(horseName.equals(finalHorse[2])) {
money = (int)(bat * 1.2);
horseRank = "3등";
}
else if(horseName.equals(finalHorse[3])) {
money = (int)(bat * 1.0);
horseRank = "4등";
}
else {
money = 0;
horseRank = "5등";
}
System.out.println();
System.out.println("===============================================================");
System.out.println("당신이 배팅한 말 : " + horseName + ", 배팅한 금액 : " + bat + " , 순위 : " + horseRank);
System.out.println("당첨금 : " + money + "원 입니다.");
System.out.println("===============================================================");
}
}
public class T1{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String horseName = "";
int bat = 0;
System.out.println("#당첨금 안내#");
System.out.println("1등은 배팅금액의 200%");
System.out.println("2등은 배팅금액의 150%");
System.out.println("3등은 배팅금액의 120%");
System.out.println("4등은 배팅금액의 100%");
System.out.println("5등은 당첨금이 없습니다.");
System.out.println("====================");
System.out.println("배팅금액을 입력하세요? ");
System.out.print("=======>>> ");
bat = sc.nextInt();
int choice = 0;
while(true) {
System.out.println("==========오늘의 경주마==========");
System.out.println("1번 경주마 : 짱구");
System.out.println("2번 경주마 : 철수");
System.out.println("3번 경주마 : 유리");
System.out.println("4번 경주마 : 맹구");
System.out.println("5번 경주마 : 훈이");
System.out.println("경주마를 선택하세요? ");
System.out.print("=====================>>> ");
choice = sc.nextInt();
if(choice < 1 || choice > 5) System.out.println("경주마는 1~5번 중 선택하셔야 합니다.");
else break;
}
System.out.println();
switch(choice) {
case 1: horseName = "1번말 (짱구)"; break;
case 2: horseName = "2번말 (철수)"; break;
case 3: horseName = "3번말 (유리)"; break;
case 4: horseName = "4번말 (맹구)"; break;
case 5: horseName = "5번말 (훈이)"; break;
}
//일반스레드 5개
Horse horse = new Horse(bat, horseName);
Thread horse1 = new Thread(horse, "1번말 (짱구)");
Thread horse2 = new Thread(horse, "2번말 (철수)");
Thread horse3 = new Thread(horse, "3번말 (유리)");
Thread horse4 = new Thread(horse, "4번말 (맹구)");
Thread horse5 = new Thread(horse, "5번말 (훈이)");
horse1.start();
horse2.start();
horse3.start();
horse4.start();
horse5.start();
try {
horse1.join();
horse2.join();
horse3.join();
horse4.join();
horse5.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
horse.total();
sc.close();
}
}
첫댓글 StringBuffer을 이용한 누적 출력처리~ 아주 좋습니다.
27번행이 32번행위에 한줄 복사처리되어야 마지막 완주한 말들의 방향표시(>>)가 100%을 나타내게 되겠죠... 수정처리 해 주시고요..
내용~ 잘 보았습니다. 수고하셨어요