GrafikkToTerninger.java [Last ned]

/*
 * Programmet simulerer kast med to terninger og teller
 * antall forekomster av hver øyne-sum 2-12. Resultatene
 * presenteres grafisk i et søylediagram.
 */
import static java.lang.Integer.*;
 
public class GrafikkToTerninger extends EasyGraphics {
 
  public static void main(String[] args) {
  launch(args);
  }
 
  public void run() {
  makeWindow("Kast med to terninger");
 
    int[] antallAv = new int[13];  // 11 muligheter for sum øyne,
                                   // lagret på indeksene 2 - 12
 
    // Leser inn antall kast, ikke for få, og ikke flere enn det
    // som er nødvendig for å få en rimelig fordeling av sum øyne.
    int antallKast;
    do {
      antallKast = parseInt( getText("Gi antall kast (100-8000):") );
    } while (antallKast < 100 || antallKast > 8000);
 
    // Gjennomfører ønsket antall kast og registrerer sum øyne på
    // de to terningene i en telletabell. Tabellen er litt for stor,
    // og indeksene 0 og 1 står ubrukte som uaktuelle sum-verdier.
    for (int i=0; i<antallKast; i++) {
      int øyneEn = (int)(Math.random()*6) + 1;    // Kaster første terning
      int øyneTo = (int)(Math.random()*6) + 1;    // Kaster andre terning
      antallAv[øyneEn+øyneTo]++;    // Teller opp dette kastresultatet
    }
 
    // Regner om antallsverdiene til prosenter, slik at ingen
    // av de ulike søylene blir høyere enn det grafiske vinduet.
    int[] andelAv = new int[13];   // Prosent av hver mulig sum øyne
    for (int i=2; i<=12; i++)
      andelAv[i] = antallAv[i]*100/antallKast;
 
    // Lager en overskrift på søylediagrammet
    setFont("Arial",18);
    drawString("Resultat fra " + antallKast + " kast.",300,50);
    pause(150);
    setFont("Arial",14);
 
    fillRectangle(80,600,620,2);   // Tegner x-aksen som tykk strek
    fillRectangle(100,80,2,540);  // Tegner y-aksen som tykk strek
 
    // Setter enheter på x-aksen, vertikal strek 10 piksler.
    // Skriver ulike sum øyne som enheter under aksemerkene.
    for (int i=2; i<=12; i++) {
      drawLine(50+i*50,595,50+i*50,605);
      drawString(""+i, 50+i*50-5, 630);
      pause(90);
    }
 
    // Setter enheter på y-aksen, horisontal strek 10 piksler.
    // Skriver prosentverdier 10-100 som aksemerker
    for (int i=1; i<=5; i++) {
      drawLine(95, 600-i*100, 105, 600-i*100);
      drawString(""+i*5+"%", 60, 600-i*100+5);
      pause(90);
    }
    // Legger på røde linjer for å lette lesing av %-verdi
    setColor(255,0,0);
    for (int i=1; i<=10; i++) {
      drawLine(100, 600-i*50, 700, 600-i*50);
      pause(90);
    }
 
    // Tegner blå søyler, dvs. andelen av hver mulige sum øyne.
    setColor(0,0,255);
    for (int i=2; i<=12; i++) {
      int x = 50+i*50-20;
      int y = andelAv[i]*20;
      fillRectangle(x, 600-y, 40, y);
      pause(150);
    }
 
  }
 
}
Kildekode blir vist ved hjelp av GeSHi.