프로그래밍 언어 복습/JAVA

#54 JAVA 자동차 vs 자전거 vs 오토바이 경주시합 (interface && 추상화 사용 && 오버라이딩)

사재원 교수 2022. 6. 10. 23:56

 

정답 코드

package Test;

import java.util.Random;
//부모 클래스
abstract class Vehicle{
	int result;
	int gage;
	
	abstract void Move(int stop,Random r,int gage);
}
//부스터 인터페이스
interface Buster{
	void buster();
}


// 자동차 클래스
class Car extends Vehicle implements Buster{
	void printresult() {
		System.out.println("자동차의 주행거리 : " + result);
	}
	void printgage() { 
		gage = gage % 4; //4턴마다
		System.out.println("자동차의 게이지 : " + gage);
	}
	
	public void Move(int stop,Random r,int gage) {
		if(stop != 1) {
			int num = r.nextInt(21);
			result += num;
		}else {
			System.out.println("자동차가 멈춤");
			result += 0;
		}
		
		printresult();
		printgage();
	}
	
	public void buster() {
		result += 2;
	}
}
//자전거 클래스
class Bicyle extends Vehicle implements Buster{
	void printresult() {
		System.out.println("자전거의 주행거리 : " + result);
	}
	void printgage() { 
		gage = gage % 2; //2턴마다
		System.out.println("자전거의 게이지 : " + gage);
	}
	
	public void Move(int stop,Random r,int gage) {
		if(stop != 2) {
			int num = r.nextInt(11);
			result += num;
		}else {
			System.out.println("자전거가 멈춤");
			result += 0;
		}
		
		printresult();
		printgage();
	}
	
	public void buster() {
		result += 5;
	}
}
//오토바이 클래스
class Ohto extends Vehicle implements Buster{
	void printresult() {
		System.out.println("오토바이의 주행거리 : " + result);
	}
	void printgage() { 
		gage = gage % 3; //3턴마다
		System.out.println("오토바이의 게이지 : " + gage);
	}
	
	public void Move(int stop,Random r,int gage) {
		if(stop != 3) {
			int num = r.nextInt(16);
			result += num;
		}else {
			System.out.println("오토바이가 멈춤");
			result += 0;
		}
		
		printresult();
		printgage();
	}
	
	public void buster() {
		result += 3;
	}
}



public class Q4 {
	
	static void Check(int stop,Buster b) {
		if(b instanceof Car) { //자동차니?
			if(stop != 1 && ((Car)b).gage == 3) {
				((Car)b).buster();
			}
		}
		if(b instanceof Bicyle) { //자전거니?
			if(stop != 2 && ((Bicyle)b).gage == 1) {
				((Bicyle)b).buster();
			}
		}
		if(b instanceof Ohto) { //오토바이니?
			if(stop != 3 && ((Ohto)b).gage == 2) {
				((Ohto)b).buster();
			}
		}
	}
	
	
	public static void main(String[] args) {
		Random r = new Random();
		
		Car c = new Car();
		Bicyle b = new Bicyle();
		Ohto o = new Ohto();
		
		while(true) {
			int a = r.nextInt(3)+1; // 1 2 3
			
			//움직이기
			c.Move(a, r, c.gage);
			b.Move(a, r, b.gage);
			o.Move(a, r, o.gage);
			
			//부스터추가
			Check(a, c);
			Check(a, b);
			Check(a, o);
			
			
			if(c.result >= 500 || b.result >= 500 || o.result >= 500) {
				break;
			}
			
			c.gage ++;
			b.gage ++;
			o.gage ++;
		}
		
		
		int[] array = new int[3];
		array[0] = c.result;
		array[1] = b.result;
		array[2] = o.result;
		
		int max = 0;
		int k = 0;
		
		for(int i=0;i<array.length;i++) {
			if(max < array[i]) {
				max = array[i];
				k = i;
			}
		}
		
		if(k == 0) {
			System.out.println("자동차 승리 ! ");
		}else if(k == 1) {
			System.out.println("자전거 승리 ! ");
		}else if(k == 2) {
			System.out.println("오토바이 승리 ! ");
		}
		
		
		
	}

}

아직 interface 개념이 명확하지 않아 조금 애 먹었습니다. 

제 식대로 풀어봤는데 이상한 점이 있다면 알려주세요 ! 

 

 

감사합니다.