Friskis håndballklubb skal arrangere håndballcup for barn i alderen syv – sytten år. I den forbindelse er du blitt engasjert for å lage deler av et programsystem som skal holde styr på de ulike puljene og kampoppsettet for disse. Cupen spiller med rene aldersgrupper hvor hver aldersgruppe deles inn i puljer med fire lag per pulje. Hvert lag skal spille én kamp mot hvert av de andre lagene i sin pulje. De to beste lagene i hver pulje går videre til A-sluttspill mens de to dårligste går videre til B-sluttspill. OPPGAVE A Sett opp objektvariabler og konstruktører for klassen. Hver pulje har et navn som angir både kjønn og årsklasse (for eksempel “J13” eller ”G9”). Lagene i puljen skal lagres i en tabell av type String (vi er kun interessert i lagenes navn). En skal kunne velge om en vil fylle lagtabellen ved opprettelse av puljeobjektet. class Pulje { private String puljenavn; private String[] lag; // navnene på lagene private int antallLag; // antall registrerte lag public Pulje(String startPuljenavn, int maxAntallLag) { puljenavn = startPuljenavn; lag = new String[maxAntallLag]; antallLag = 0; } public Pulje(String startPuljenavn, String[] startLag) { puljenavn = startPuljenavn; lag = new String[startLag.length]; for (int i = 0; i < startLag.length; i++) { lag[i] = startLag[i]; } antallLag = startLag.length; } OPPGAVE B Lag en metode som registrerer ett nytt lag i puljen. Det skal ikke være mulig å registrere flere lag enn det er plass til i puljen. public boolean registrerLag(String lagnavn) { boolean registrert = false; if (antallLag < lag.length) { lag[antallLag] = lagnavn; antallLag++; registrert = true; } return registrert; } OPPGAVE C Lag en metode som returnerer alle kampene, som skal spilles i puljen, i form av en todimensjonal tabell av strenger. Hvert lag skal spille en kamp mot hvert av de andre lagene i puljen. Rekkefølgen på kampene skal være slik: Lag 1’s kamp mot lag 2, lag 1’s kamp mot lag 3 osv.; deretter lag 2’s kamp mot lag 3, lag 2’s kamp mot lag 4 osv. public String[][] finnKampene() { String[][] kampene = new String[antallLag * (antallLag - 1) / 2][2]; int kampTeller = 0; for (int i = 0; i < antallLag; i++) { for (int j = i + 1; j < antallLag; j++) { kampene[kampTeller][0] = lag[i]; kampene[kampTeller][1] = lag[j]; kampTeller++; } } return kampene; } OPPGAVE D Lag en metode som returnerer kampoppsettet i form av en todimensjonal tabell av strenger, med korrekt rekkefølge på kampene. Rekkefølgen bestemmes ved å ta alle kampene slik de er ordnet i deloppgave d) og sortere dem slik: Første kamp, siste kamp, andre kamp, nestsiste kamp, tredje kamp osv. Se deloppgave f) for eksemplet med fire lag. public String[][] finnKampoppsett() { String[][] rot = finnKampene(); String[][] ryddig = new String[antallLag * (antallLag - 1) / 2][2]; for (int i = 0; i < rot.length / 2; i++) { ryddig[2 * i] = rot[i]; ryddig[2 * i + 1] = rot[rot.length - i - 1]; } return ryddig; } OPPGAVE E Lag en metode som returnerer en tippekupong for puljen, dvs. en streng med kampoppsettet og plass til å markere H, U eller B. public String finnTippekupong() { String [][] kamper = finnKampoppsett(); String resultat = " (H/U/B)\n"; for (int i = 0; i < kamper.length; i++) { resultat += (i + 1) + " " + kamper[i][0] + " - " + kamper[i][1] + " | |\n"; } return resultat; } // ekstra: public String toString() { String lagnavnene = ""; for (int i = 0; i < antallLag; i++) { lagnavnene += lag[i] + " "; } return puljenavn + ": " + lagnavnene; } } // Pulje OPPGAVE F Lag et klientprogram som tester klassen Pulje som du nettopp har implementert. Du kan anta at Pulje har en toString()-metode. class PuljeTest { public static void main(String[] args) { Pulje pulje1 = new Pulje("G9", 4); pulje1.registrerLag("Moss"); // kunne evt. skrevet ut om registreringen gikk bra pulje1.registrerLag("Trondheim"); pulje1.registrerLag("Bardufoss"); pulje1.registrerLag("Grimstad"); pulje1.registrerLag("Hattvik"); // en for mye - blir ikke registrert System.out.println("Første pulje: " + pulje1); System.out.println(); System.out.println("Vi går nå over til andre pulje."); String[] lag = {"Cannes", "Bologna", "Dresden", "Amsterdam"}; Pulje pulje2 = new Pulje("J13", lag); // ekstra: System.out.println("Puljen med usorterte lag: " + pulje2); System.out.println(); System.out.println("Kampene:"); String[][] kampene = pulje2.finnKampene(); for (int i = 0; i < kampene.length; i++) { System.out.println(kampene[i][0] + " - " + kampene[i][1]); } System.out.println(); System.out.println("Kampoppsettet:"); String[][] oppsett = pulje2.finnKampoppsett(); for (int i = 0; i < oppsett.length; i++) { System.out.println(oppsett[i][0] + " - " + oppsett[i][1]); } System.out.println(); System.out.println(pulje2.finnTippekupong()); } } // PuljeTest