2014-10-11 4 views
1

안녕하세요 저는 다음 숙제 문제에 대한 도움이 필요합니다.인터페이스 및 상속 java

이것은 문제의 일부일 뿐이지 만이 부분에 대해서만 도움이 필요합니다.

나는 올림픽 게임을 시뮬레이트하는 작은 시스템을 만들고 싶습니다. 시뮬레이션, 수영, 자전거 타기, 달리기 등 3 가지 스포츠가 있습니다. 선수, 수영 선수, 자전거 타는 사람, 단거리 선수 (수영, 사이클링, 달리기에서 각각 경쟁 할 수있는 선수)와 3 가지 게임에서 모두 경쟁 할 수있는 슈퍼 애플릿이 4 가지 유형이 있습니다 (이것이 내가 가장 문제가되는 것임) . 각 선수는 달리기를 위해 10-20 초, 수영을 위해 100-200 초, 자전거를 타기 위해 500-800 초 사이의 시간을 무작위로 생성하는 compete() 메소드가 있어야합니다.이 시간은 게임의 승자를 억제하는 데 사용됩니다.

제 질문은이 문제를 어떻게 시뮬레이트 할 것인가, 어떤 종류의 수업을 사용할 것인가, 어떤 관계가 될 것인가입니다. SwimGame과 같은 다른 게임 개체를 만드는 방법이 필요합니다. SwimGame에는 Swim 및 Super Athlete만의 목록이 있습니다.

이것은 현재 나의 접근 방식입니다.

그래서 나는 추상적 인 추상 클래스 인 Athlete를 가질 것이고, cycler, runner swimmer와 superAthlete는이 클래스에서 확장 할 것이다.

나는 게임 추상 클래스도 가질 것이고, SwimGame, CycleGame, RunningGame은 여기서 확장 될 것이다. 모든 게임에는 게임에서 경쟁하는 선수 목록이 있습니다.

내가 게임을 수영에 추가하고, 비슷한 상황 수 주자를 방지 할 수있을 것입니다 방법

나는 superAthleat 모든 3 개 게임

을에서에 참여할 수있을 때, 시간을 계산 연장하는 방법 다음 runAthlete는 R을 구현

interface swimInterface() { 
    public void calculateSwimTime(); 
} 

interface runInterface() { 
    public void calculateRunTime(); 
} 
interface cycleInterface() { 
    public void calculateCycleTime(); 
} 

다음 swimmerAthleate이 swimInterface을 구현합니다 첫번째 나는 3 인터페이스를 만들 생각 unInterface는 cycleAthlete는 cycleInterface을 구현, 그리고 가장 중요한 superAthlete는 runInterface, swimmerInterface 및 cycleInterface를 구현, 그래서 나는이 같은 것이다 :

public abstract class Athlete { 
    ... 
    // what should be here 
} 

public class SwimAthlete extends Athlete implements SwimInterface { 

    ... 
    public void calculateSwimTime() {...} 
} 

public class RunAthlete extends Athlete implements RunInterface { 

    ... 
    public void calculateRunTime() {...} 
} 

public class CylcleAthlete extends Athlete implements CycleInterface { 

    ... 
    public void calculateCycleTime() {...} 
} 

public class SuperAthlete extends Athlete implements SwimInterface, CycleInterface, RunInterface() { 

    public void calculateSwimTime() {...} 
    public void calculateRunTime() {...} 
    public void calculateCycleTime() {...} 

}

을하지만 나는 다른 문제가 많이 있습니다 을 내가 가지고있는 경우

public class Game { 
    ArrayList<Athlete> listOfCompetitors; 
    public Game(){ 
     listOfCompetitors = new ArrayList<Athlete>(); 
    } 
} 

public class SwimGame extends Game { 
    // I could have something like this here 
    // how could I add only SwimAthlete and SuperAthlete here 

    // how to traverse the array of athletes and only call calculateSwimTime method. 

} 

// similar for other games. 

자세한 설명이 필요한 경우이 질문에 대해 기꺼이 설명해 드리겠습니다.

+0

Q : "게임"클래스, "게임"및 athelete 추가 여부를 고려 했습니까? 또한 "수영"선수가 "달리기"게임에 참여하지 못하게 할 수 있습니까? – FoggyDay

+0

'compete()'을 호출하면, 어떤 선수가 경쟁 중인지 어떻게 알 수 있습니까? 각 이벤트마다 별도의 인터페이스를 갖는 것이 좋을 것입니다. 각각의 메소드 ('swim()','run()'등)를 가지고, 그리고 나서 각 유형의 선수에게 그 타입의 이벤트를위한 인터페이스를 구현하게하십시오 – azurefrog

+0

좋아, 내가 그 방법을 사용하지만, 그때 난 diffrent 게임 에서이 methodes를 호출하는 방법의 문제가 있습니다. 나는이 상황을 반영하기 위해 나의 질문을 업데이트 할 것이다. – aleksamarkoni

답변

0
interface Sport 
{ 
    void compete(); 
} 

abstract class Athlete implements Sport 
{ 
    String name; 

    int time = 0; 

    void setName(String name) 
    { 
     this.name = name; 
    } 

    void setTime(int time) 
    { 
     this.time = time; 
    } 

    String getName() { return name; } 
    int getTime() { return time; } 
} 

class Runner extends Athlete 
{ 
    Runner(String name) 
    { 
     setName(name); 
    } 

    @Override 
    public void compete() 
    { 
     int time = 10 + (int) (Math.random() * ((20d - 10d) + 1d)); 

     setTime(time); 
    } 
} 

class Swimmer extends Athlete 
{ 
    Swimmer(String name) 
    { 
     setName(name); 
    } 

    @Override 
    public void compete() 
    { 
     int time = 100 + (int) (Math.random() * ((200d - 100d) + 1d)); 

     setTime(time); 
    } 
} 

class Cyclist extends Athlete 
{ 
    Cyclist(String name) 
    { 
     setName(name); 
    } 

    @Override 
    public void compete() 
    { 
     int time = 500 + (int) (Math.random() * ((800d - 500d) + 1d)); 

     setTime(time); 
    } 
} 
+0

그럼 3 개의 게임 모두에서 경쟁 할 수있는 superAthlete와 어떻게해야할까요? – aleksamarkoni