Skoytelop.java [Last ned]

import static java.lang.System.*;
import static java.lang.Double.*;
import static java.lang.Integer.*;
import static javax.swing.JOptionPane.*;
 
/*
 *  Hovedklasse for registrering av skøytetider.
 *  Programmet leser først inn aktuelle distanser fra bruker,
 *  deretter antall løpere og nr, navn og skøytetider for hver løper,
 *  før den/de med best poengsum blir skrevet ut.
 *
 *  Denne løsningen kan håndtere skøyteløp både for kvinner og menn,
 *  og både sprint og all round.
 *
 */
public class Skoytelop {
 
  // Antall distanser
  private static int ANTALL_DISTANSER = 4;
 
  // Tabell for å ta vare på distanser
  private static int[] distanser;
 
  // Tabell for å ta vare på deltagere
  private static Deltager[] løperTab;
 
  public static void main(String[] args) {
    lesInnResultat();
    double best = bestePoengsum();
    visVinnere(best);
  }
 
  private static void lesInnResultat() {
    // Les inn distanser (fra korteste til lengste)
    distanser = new int[ANTALL_DISTANSER];
    for (int i=1; i<=ANTALL_DISTANSER; i++) {
      distanser[i-1] = parseInt(showInputDialog("Distanse " + i + " (meter):"));
    }
 
    // Les inn antall løpere
    String antTxt = showInputDialog("Antall løpere:");
    int ant = parseInt(antTxt);
 
    // Opprett deltagertabell som er akkurat stor nok
    løperTab = new Deltager[ant];
 
    // Les inn opplysninger om hver enkelt deltager,
    // og legg inn i deltagertabellen.
    for (int nr=0; nr<ant; nr++) {
      løperTab[nr] = lesDeltager();
    }
  }
 
  private static Deltager lesDeltager() {
    int nr          = parseInt(showInputDialog("Deltagernr:"));
    String navn     = showInputDialog("Navn:");
 
    // Les inn tider (fra korteste til lengste distanse)
    double [] tider = new double[ANTALL_DISTANSER];
    for (int i=1; i<=ANTALL_DISTANSER; i++) {
      tider[i-1] = parseDouble(
        showInputDialog("Tid på distanse " + distanser[i-1] + " meter:"));
    }
 
    // Opprett nytt Deltager-objekt.
    Deltager d = new Deltager(nr, navn, distanser, tider);
 
    return d;
  }
 
  private static double bestePoengsum() {
    double bestePoengsum = Double.MAX_VALUE;
 
    for (int nr=0; nr<løperTab.length; nr++) {
      // Sjekk om ny beste poengsum
      if (løperTab[nr].poengsum() < bestePoengsum) {
        bestePoengsum = løperTab[nr].poengsum();
      }
    }
 
    return bestePoengsum;
  }
 
  private static void visVinnere(double best) {
    String ut = "Vinnere:\n";
    for (int lnr=0; lnr<løperTab.length; lnr++) {
      // Legg til de som har best poengsum
      if (løperTab[lnr].poengsum() == best) {
        ut += løperTab[lnr].toString() + "\n";
      }
    }
 
    showMessageDialog(null, ut);
  }
 
}
Kildekode blir vist ved hjelp av GeSHi.