All pastes #282664 Raw Edit

Someone

public text v1 · immutable
#282664 ·published 2006-12-17 19:55 UTC
rendered paste body

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