Erste Gehversuche mit Applets

Ich steige mit einem „Hallo Welt“-Programm ein - wie sich das gehört. Das schreibe ich allerdings hier nicht auf. Lediglich ein paar Methoden und Objekte, die dafür benutzt werden könnten:

lAusgabe.setText("Hallo Welt!");
taAusgabe.setText ("Hallo Welt");
taAusgabe.append ("Hallo Welt!");

Java ist objektorientiert. Wow! Ja und? Das heißt, Wenn der Rechner irgendetwas tun soll, müssen wir das einem Objekt mitteilen. Z.B. sagen wir einem label, bitte liebes label, gib doch mal folgenden Text aus. Da Objekte im Allgemeinen recht freundlich sind, wird das label dieser Aufforderung nachkommen - jedenfalls, wenn die Nachricht korrekt geschrieben wurde. Der Aufbau dieser Nachrichten ist immer der gleiche:

nameDesObjekts.nameDerNachricht(eventuellVorhandeneParameter)

In dem Fall mit dem label, nennen wir es lAusgabe, lautet der Aufruf:

lAusgabe.setText("Hallo Welt!");

Auf deutsch:„Hör ma, liebes Label, ändere doch bitte mal Deine Aufschrift um in 'Hallo Welt!'“ - Kein Bitte, kein Danke…

Wenden wir uns nun noch schwierigeren Algorithmen zu.

Die Zahlen von 1 bis 10 in eine jTextArea ausgeben

for (int i=1; i<=10; i++) {
    taAusgabe.append(Integer.toString(i)+i" "
}

Erläuterungen:

  • int steht für Integer bzw. ganze Zahlen mit 32 Bit Größe.
  • for steht für eine Schleife, bei der
    • eine Integervariable einen Startwert erhält,
    • die Anweisungen in der folgenden geschweiften Klammerung solange wiederholt wird, wie die Bedingung in den runden Klammern eine wahre Aussage ergibt und
    • die Integervariable um einen im dritten Teil der runden Klammer definierten Wert nach jedem Schleifendruchlauf verändert wird. Hier: Plus 1
  • append hängt den neuen Text an den schon vorhandenen an.
  • Integer.toString macht aus einer Integervariablen einen String (Text), da Java nur Strings ausgeben kann.

Die Zahlen von 1 bis 49 ausgeben - 7 Zahlen pro Zeile

for (int i=1; i<=49; i++) {
    taAusgabe.append(Integer.toString(i)+" ");
    if (i%7==0) {
        taAusgabe.append("\n");
    }
}

Erläuterungen:

  • i%7 (sprich i modulo 7) ergibt den Rest der Division von i durch 7. Beispiel: 4 durch 7 ist gleich 0 Rest 4. Also ergibt 4%7 4. 11%7 ergibt auch 4. 13%7 ergibt 6. 14%7 ergibt 0. Das heißt, nach jeder 7 Zahl (die ja durch 7 teilbar ist und daher bei der Division durch 7 einen Rest von 0 ergibt) wird ein Zeilenumbruch („\n“) ausgegeben.
  • == vergleicht 2 Werte und gibt entweder true oder false. Wird nur ein Gleichheitszeichen notiert, so erwartet der Compiler eine Zuweisung - keinen Vergleich!

Zweite Möglichkeit (Danke Lukas!)

for (int i=1; i<=49; i+=7) {
    for (int z=i; z<=i+6; z++) {
        taAusgabe.append (Integer.toString(z)+" ");
    }
    taAusgabe.append("\n");
}

Die Zufallszahlen

Benötigt man bestimmte mathematische Funktionen, wie die Bestimmung einer Zufallszahl, so kann man auf die Wrapper-Klasse Math zurückgreifen. Diese Klassen werden immer dann verwendet, wenn es wenig oder keinen Sinn macht ein Objekt einer bestimmten Klasse zu generieren. Es wird hier lediglich die Verwendung mathematischern Methoden gefordert, wer diese zu Verfügung stellt, ist eigentlich wurscht. Trotzdem wird in Java die objektorientierte Schreibweise gefordert. Es gibt also kein Objekt namens Math. Es handelt sich hier um die Wrapper-Klasse. Daher liefert der Aufruf

Math.random()

eine Zufallszahl, die im Intervall [0;1[ liegt. Nein, das ist kein Tippfehler. Die mathematisch korrekte Klammerung des Intervalls bedeutet, dass die Null im Intervall enthalten ist und die Eins nicht. Sollen aus einer solchen Zahl aber ganze Zahlen von 1 bis 49 erstellt werden, ist folgende Rechnung notwendig:

(int)Math.round(  Math.random()*49 + 0.5  );

Die Intervalllänge wird von [0;49[ aufgeblasen und nach [0,5; 49,5[ verschoben. Durch das Runden ergeben sich Dezimalbrüche, deren Nachkommastellen sämtlich 0 sind. (int) macht aus dem Dezimalbruch wieder eine ganze Zahl.

Mit Hilfe einer for-Schleife können nun beliebig viele Zufallszahlen ausgegeben werden.

Auch Zufallszahlen

Viele schöner geht das allerdings mit Hilfe der Klasse Random. Man erzeugt zunächst ein Objekt dieser Klasse. Das Objekt ist dann dafür zuständig Zufallszahlen zu liefern. Man fragt es einfach danach. Im folgenden Beispiel wird dem Konstruktor von Random eine 3 überliefert. Somit wird die erste „Zufalls“zahl festgelegt - sehr praktisch zum Testen!

        Random zufallszahlen = new Random(3);
        int wuerfel = zufallszahlen.nextInt(6);

Auch hübsch:

            int zahl = Integer.parseInt(javax.swing.JOptionPane.showInputDialog("Neue zahl:"));

Zufallszahlen in ein array speichern

Meistens müssen Zahlen gespeichert werden, damit sie beispielsweise vor der Ausgabe sortieren kann. Im Fall der Lottozahlen bietet sich die Verwendung eines array (einer Reihung) an. Erzeugen und speichern der Zahlen:

int [] zahlen = new int [6]; 
for (int i=0; i<=5; i++) {
    zahlen[i] = (int)Math.round( Math.random()*49+0.5 );
}

Danach kann man sie beispielsweise mit einer weiteren for-Schleife ausgeben:

for (int i=0; i<=5; i++) {
    taAusgabe.append(Integer.toString(i)+" ");
}

Ausführliche Information findest Du unter arrays.

VERSCHIEDENE Zufallszahlen

Ein sehr eleganter Algorithmus stammt von Lukas Mäusezahl. Vielen Dank dafür!

Er baut darauf auf, die vorhandenen Zahlen von 1 bis 49 eine Weile lang zu durchmischen. Dazu werden die Zahlen von 1 bis 49 zunächst in einem array gespeichert:

int [] kugeln = new int [49];   // Der array wird erzeugt.
for (int i=1; i<=49; i++) {
    kugeln[i-1] = i;            // Die Felder des arrays sind von 0 bis 48 nummeriert
                                // und erhalten die Zahlen von 1 bis 49.
}    

Nun kann gemischt werden.

for (int i=1; i<=ganzGrosseZahl; i++) {
    int posFeld1 = (int)Math.round(Math.random()*49-0.5);
    int posFeld2 = (int)Math.round(Math.random()*49-0.5);
    // Inhalte der beiden zufällig gewählten Felder tauschen:
    int zwischenspeicher = kugeln[posFeld1];
    kugeln[posFeld1]=kugeln[posFeld2];
    kugeln[posFeld2]=zwischenspeicher;
}

Da keine neuen Kugeln erzeugt werden, sondern lediglich ihre Positionen im array ausgetauscht werden, kann es nicht passieren, dass eine Zahl doppelt vorkommt.

Im Anschluss gibt man einfach die ersten 6 Zahlen des array aus.

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Noncommercial-Share Alike 4.0 International