프로그래밍 언어 복습/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 개념이 명확하지 않아 조금 애 먹었습니다.
제 식대로 풀어봤는데 이상한 점이 있다면 알려주세요 !
감사합니다.