studyklar
GdI 1 · Übungsblatt 7 · Aufgabe 1

Array rückwärts ausgeben: erst Tastatur, dann Datei

Ein Array ist eine Reihe von Plätzen unter einem Namen, jeder Platz hat eine Nummer. Hier kommen sechs Zahlen hinein, und sie kommen rückwärts wieder heraus. Zuerst tippt man die Zahlen ein, danach liest das Programm sie aus einer Datei. Rechts stehen das Array und das Programm, die Zeilen zum aktuellen Schritt sind hervorgehoben. Mit Weiter geht es Schritt für Schritt voran.

Die Aufgabe

Aufgabe 7.1

a) Schreiben Sie ein Programm A7_1a, das die Elemente eines sechsstelligen Integer-Arrays a von der Tastatur einliest und in umgekehrter Reihenfolge wieder ausgibt.

b) Damit die einzelnen Array-Elemente nicht bei jedem Testlauf erneut von Hand eingegeben werden müssen, tragen Sie sie vorab in eine Textdatei eingabe71.txt ein. Kopieren Sie die Programmdatei A7_1a.java (neuer Name: A7_1b.java) und ändern das Programm so ab, dass die Array-Elemente statt von der Tastatur jetzt aus dieser Textdatei gelesen werden. Ändern Sie auch die Ausgabe, so dass sie in die Textdatei ausgabe71.txt erfolgt. Verwenden Sie für die Ein- und Ausgabe die beiden Klassen In und Out.

In a) tippt man sechs ganze Zahlen ein, etwa 12, 7, −3, 40, 5 und 19. Das Programm merkt sie sich in einem Array und gibt sie danach in umgekehrter Reihenfolge aus: 19, 5, 40, −3, 7, 12.

In b) bleibt die Arbeit dieselbe. Nur liest das Programm die Zahlen aus der Datei eingabe71.txt und schreibt das Ergebnis in die Datei ausgabe71.txt. So muss man beim Testen nicht jedes Mal tippen.

Annahme: Die Aufgabe gibt keine Zahlen vor. Wir nehmen zum Testen 12 7 -3 40 5 19, in a) eingetippt und in b) als Inhalt von eingabe71.txt.

„Sechsstellig“ heißt hier: Das Array hat sechs Plätze. Es geht nicht um Zahlen mit sechs Ziffern.

  1. a) Ein Array mit sechs Plätzen anlegen.
  2. a) Sechs Zahlen einlesen, Platz 0 bis 5.
  3. a) Rückwärts ausgeben, Platz 5 bis 0.
  4. a) Testlauf.
  5. b) Die Eingabe aus der Datei eingabe71.txt holen.
  6. b) Die Ausgabe in die Datei ausgabe71.txt schreiben.

Ein Array für sechs Zahlen

public class A7_1a {     public static void main(String[] args) {        int[] a = new int[6];

Sechs einzelne Variablen a1 bis a6 wären mühsam. Ein Array fasst die sechs Zahlen unter einem Namen a zusammen. Die Plätze heißen Elemente, ihre Nummer heißt Index. Der Index beginnt bei 0: Die sechs Elemente sind a[0] bis a[5].

int[] a sagt: a ist ein Array aus ganzen Zahlen. new int[6] legt das Array mit sechs Plätzen an. Java füllt dabei jeden Platz mit 0. Das Gerüst darum ist das übliche: Klasse A7_1a, darin main.

Aus Skript 5, Folie 5-5 („Eindimensionale Arrays“): Ein Array ist eine Tabelle gleichartiger Elemente. int[] a; deklariert es, a = new int[5]; erzeugt es mit 5 Elementen. Die Indizierung beginnt bei 0.

Sechs Zahlen einlesen

        Out.println("Bitte 6 ganze Zahlen eingeben:");        for (int i = 0; i < a.length; i++) {            a[i] = In.readInt();        }
igelesene Zahldanach gilt
012a[0] = 12
17a[1] = 7
2-3a[2] = -3
340a[3] = 40
45a[4] = 5
519a[5] = 19

Jedes Element bekommt eine Zahl von der Tastatur. Das erledigt eine for-Schleife: Die Zählvariable i läuft von 0 bis 5, und in jedem Durchlauf liest In.readInt() eine Zahl nach a[i].

Die Bedingung heißt i < a.length. a.length ist die Länge des Arrays, hier 6. Also läuft die Schleife für i = 0, 1, 2, 3, 4, 5 und hört bei 6 auf. i <= a.length wäre falsch: Den Platz a[6] gibt es nicht.

In und Out sind Hilfsklassen der Vorlesung, keine Standardklassen von Java. Die Dateien In.java und Out.java müssen darum im selben Ordner liegen wie A7_1a.java.

Aus Skript 5, Folie 5-7 („Arbeiten mit Arrays“) und Skript 4, Folie 4-30 („Ein-/Ausgabe“): a.length liefert die Zahl der Elemente. Ein Array liest man mit for (int i = 0; i < a.length; i++) a[i] = In.readInt(); ein. In.readInt() liest eine ganze Zahl, Out.println(x) gibt x aus und beginnt eine neue Zeile.
Aus Skript 4, Folie 4-55 („For-Schleife (Zählschleife)“): Der Kopf for (int i = 0; i < a.length; i++) hat drei Teile: den Start i = 0, die Bedingung i < a.length, die vor jedem Durchlauf geprüft wird, und i++, das i nach jedem Durchlauf um 1 erhöht.
Noch 5 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Abbildung 1a) Von der Tastatur

einlesen, dann rückwärts ausgeben

Eingabe über die Tastatur
12 7 -3 40 5 19
i
0
1
2
3
4
5
a[i]
?
?
?
?
?
?
Ausgabe
?
?
?
?
?
?
a[5]
a[4]
a[3]
a[2]
a[1]
a[0]
public class A7_1a {     public static void main(String[] args) {        int[] a = new int[6];         Out.println("Bitte 6 ganze Zahlen eingeben:");        for (int i = 0; i < a.length; i++) {            a[i] = In.readInt();        }         Out.println("In umgekehrter Reihenfolge:");        for (int i = a.length - 1; i >= 0; i--) {            Out.print(a[i] + " ");        }        Out.println();    }}
LegendeArray a, Eingabe und Ausgabe. „?“ steht für Werte, die erst ein späterer Schritt erklärt.