EK 2020

Komende zomer spelen de Belgische Rode Duivels op het Europees Kampioenschap voetbal. In deze opgave zul je een voetbalteam modelleren, waarbij, net zoals in een voetbalmatch, spelers gewisseld kunnen worden voor andere spelers.

Opgave

Schrijf een Java-klasse SoccerTeam. Deze klasse stelt een voetbalteam voor en moet volgende constructor en minstens volgende methoden bevatten. Je bent volledig vrij om de nodige instantievariabelen te kiezen en het is ook toegelaten (en aangeraden!) om extra methodes toe te voegen, dit kan je helpen bij het zoeken naar fouten. Merk op dat deze methoden gebruikmaken van een SoccerPlayer klasse. Deze kan je hier1 downloaden, het is de bedoeling dat je deze lokaal in dezelfde map plaatst als de SoccerTeam klasse, maar je hoeft deze niet in te dienen.

Specificaties

Constructor

De constructor heeft 1 argument:

public SoccerTeam(String name)

Methodes

Je klasse moet minstens onderstaande methoden hebben. Deze zijn gerangschikt in alfabetische volgorde, niet volgens moeilijkheid.

addPlayer()

public boolean addPlayer(SoccerPlayer player)

Deze methode voegt de gegeven speler toe aan het voetbalteam. Indien dit lukt, geeft de methode true terug, anders false. Het mag enkel mogelijk zijn om een speler toe te voegen wanneer aan alle onderstaande voorwaarden is voldaan:

getAverageAge()

public double getAverageAge()

Deze methode geeft de gemiddelde leeftijd van alle toegevoegde spelers weer. Wanneer er nog geen spelers zijn toegevoegd, geeft deze methode logischerwijs 0.0 terug.

getFormation()

public String getFormation()

Deze methode bepaalt de huidige formatie van het voetbalteam. De formatie is een string van 3 cijfers, gescheiden door streepjes, die aangeeft hoeveel spelers er op elke positie staan. De positie van een speler kan je opvragen met de getPosition()-methode in de SoccerPlayer-klasse. Deze methode kan 4 mogelijke uitkomsten hebben:

De formatie bestaat uit het aantal verdedigers, aantal middenvelders en aantal aanvallers, in die volgorde. Wanneer een voetbalteam bijvoorbeeld bestaat uit 4 verdedigers, 4 middenvelders en 2 aanvallers, zal deze methode de string 4-4-2 teruggeven.

getName()

public String getName()

Deze methode geeft de naam van het voetbalteam terug.

getPlayers()

public SoccerPlayer[] getPlayers()

Deze methode geeft een array terug van alle spelers die momenteel in het team zitten. Deze array mag null-waarden bevatten; de test zal deze verwijderen. De volgorde van spelers in deze array is niet belangrijk.

getPlayersAt()

public SoccerPlayer[] getPlayersAt(SoccerPlayer.Position position)

Deze methode geeft een array terug van alle spelers die momenteel in het team zitten en op de gegeven positie position spelen. Deze array mag null-waarden bevatten; de test zal deze verwijderen. De volgorde van spelers in deze array is niet belangrijk.

substitute()

public boolean substitute(SoccerPlayer out, SoccerPlayer in)

Deze methode vervangt de speler out door de speler in. Indien dit lukt, geeft de methode true terug, anders false. Een wissel mag enkel doorgaan als volgende voorwaarden gelden:

Opmerkingen en tips

Lokaal testen

Het is aangeraden om je oplossing lokaal uit te proberen en optioneel wat print-statements toe te voegen om je te helpen debuggen. Dit kan je simpelweg doen door aan je klasse een main-methode toe te voegen, net zoals in vorige opgaves.

public class SoccerTeam {
    // Constructor en andere methodes staan hierboven.

    public static void main(String[] args){
        SoccerTeam team = new SoccerTeam("Rode Duivels");
        System.out.println(team.getAverageAge()); // output: 0.0
    }
}