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 1s kamp mot lag 2, lag 1s kamp mot lag 3 osv.; deretter lag 2s kamp mot lag 3, lag 2s 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