Variablenfelder (2)

Was man bei der Verwendung von Feldern beachten muss

Im Programmcode merkt sich Java nicht die in einem Feld gespeicherten Werte sondern nur die Speicheradresse des Feldes. Deshalb kann man den Inhalt des Feldes nicht durch eine einfache Wertzuweisung kopieren, sondern muss eine Schleife schreiben, die das Feld Wert für Wert kopiert.


public class Felder_2_Vorsicht {
  public static void main(String[] args) {
    int[] lotto = new int[6];                  // So legt man ein Feld mit sechs Variablen an.
                                               // Zahlen werden automatisch mit 0 initialisiert.
    lotto[0] = 7;                              // So kann man auf jede einzelne Variable zugreifen.
    lotto[1] = 35;
    lotto[2] = 31;
    lotto[3] = 12;
    lotto[4] = 34;
    lotto[5] = 19;

    int[] lottoB = {15, 3, 1, 38, 19, 49};    // So lässt sich ein Feld beim Anlegen initialisieren


    lottoB = lotto;                    // Vorsicht! Diese Form der Wertzuweisung tauscht nur
                                       // die Referenz aus. Der Name lottoB verweist nun auf
                                       // dieselbe Speicherstelle wie der Name lotto.
                                       // Die zugewiesenen Daten sind nicht mehr erreichbar.

    lotto[5] = 21;                     // Beweis: Wenn eine der Variablen von lotto geändert wird,
                                       // ändert sich gleichzeitig der entsprechende Wert von lottoB.

    lottoB = new int[6];               // So geht's besser: Wir reservieren einen neuen Speicherplatz
                                       // für das Feld lottoB ...

    for (int i=0; i<lotto.length-1; i++) {
      lottoB[i]=lotto[i];              // und kopieren die einzelnen Variablen mit einer Schleife.
    }                                  // (lotto.length liefert die Anzahl der Elemente im Feld.)

    lotto[3]=6;                        // Bei einer Änderung von lotto...
                                       // bleibt lottoB nun unbehelligt.
  }
}


Back to the roots: Programmstart mit Parametern

Wir wandeln unser allererstes Programm noch einmal ab. Diesmal grüßen wir nicht die Welt, sondern beliebige Personen.


class Hallo {
  public static void main(String[] args) {
    System.out.println("Guten Morgen, "+args[0]+" und "+args[1]+". Wie geht's?"); 
                                                      
  }
}


Kompilieren Sie dieses Programm , öffnen Sie die Konsole und geben Sie ein java Hallo Max Moritz.

Sie erinnern sich: java ruft die JVM (Java Virtual Machine) auf, Hallo ist der Name des auszuführenden Programms.

Das Wörter "Max" und "Moritz" werden aus der Eingabe gelesen, in ein Stringfeld mit dem Namen args gespeichert und können  dort abgerufen werden. Der erste eingegebene String ist unter args[0] verfügbar, der zweite unter args[1] usw. Die Parameter müssen nicht der Reihe nach verwendet werden und auch nicht alle benutzt werden. Natürlich aber dürfen Sie nicht mehr Argumente abfragen, als der Benutzer eingibt. Wie viele das waren, können Sie mit args.length herausfinden.

Aufgaben:

  1. Belegen Sie das Feld lotto mit 6 Zufallszahlen zwischen 1 und 49 und geben Sie die Zahlen auf dem Bildschirm aus.
  2. Sorgen Sie dafür, dass nicht zweimal dieselbe Zahl gezogen werden kann.
  3. Sorgen Sie dafür, dass die Zahlen nach dem Ziehen der Größe nach geordnet werden.
  4. Schreiben Sie ein Programm, das auf den Konsolenaufruf java Summe 3 4 hin die Summe der Parameter (hier: 7) ausgibt.
  5. Kleiner Hirnverzwirner: Wenn Sie das folgende Programm mit dem grünen Pfeil startesn, erhalten Sie eine Fehlermeldung. Trotzdem funktioniert es. Öffnen Sie die DOS-Konsole und geben Sie ein: java weiß was programmierer wollen
    Was antwortet der Computer? Erklären Sie! (Hilfsfrage: Wie zählen Computer?)
    public class weiß {
      public static void main(String[] args) {
        System.out.print(args[0].charAt(2));
        System.out.print(args[1].charAt(0));
        System.out.print(args[1].charAt(8));
        System.out.print(args[1].charAt(9));
        System.out.print(args[2].charAt(3));
        System.out.print(args[2].charAt(4));
        System.out.print(args[2].charAt(5));
      }
    }