2014-10-11 80 views
1

你好,我需要下一個作業問題的幫助。接口和繼承java

這只是問題的一部分,但我只需要幫助該部分。

我想製作一個模擬奧運遊戲的小系統。我想要模擬,游泳,騎自行車和跑步三種運動。我想使用四種類型的運動員,游泳運動員,騎自行車的人,短跑運動員(可分別參加游泳,騎自行車和跑步比賽)和超級運動員,他們可以參加所有三場比賽(這是我遇到的最多問題) 。每個運動員應該有一個競賽()方法,這個方法會隨機產生跑步10到20秒,游泳100到200秒和騎自行車500到800秒的時間,這個時間將被用來阻止遊戲的勝利者。

我的問題是如何模擬這個問題,使用什麼樣的類,以及它們的關係是什麼。我需要一種方法來創建不同的遊戲對象,比如只有Swim和Super Athlete的SwimGame。

這是我現在的做法。

因此,我將擁有基本的抽象類運動員,而cycler,runner游泳運動員和superAthlete將從這一類擴展而來。

我也會有遊戲抽象類,SwimGame,CycleGame和RunningGame將從這裏延伸。每場比賽都會有在比賽中競爭的運動員名單。

我如何能夠防止亞軍被添加到游泳比賽,而類似的情況

我將如何延長計算時間,當superAthleat可以參加所有3場比賽

在起初我還以爲我做3個接口:

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

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

,然後進行swimmerAthleate實施swimInterface,然後runAthlete實現[R 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

問:你有沒有考慮添加一個「事件」類,即「有一個」遊戲和運動員?也可能不允許「游泳運動員」運動員參加「跑步」遊戲? – FoggyDay 2014-10-11 21:54:47

+0

當你打電話競爭()時,你怎麼知道運動員參加哪項比賽?每個事件都有一個單獨的接口,每個接口都有自己的方法('swim()','run()'等),然後讓每種類型的運動員都實現接口被允許參與競爭。 – azurefrog 2014-10-11 21:56:03

+0

好的我使用了這種方法,但是我遇到了如何從不同的遊戲中調用這些方法的問題。我會更新我的問題以反映這種情況。 – aleksamarkoni 2014-10-11 22:04:39

回答

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

那麼如何處理superAthlete,誰可以參加所有的3場比賽。 – aleksamarkoni 2014-10-11 22:37:07