Sie sind auf Seite 1von 28

Arrays

Oder einer für alle

Quellen: Misch: Java 4 U S.41-47

©A.Rollins und J.Kerber


Prozedurale Programmierung mit Java
H Dekla-
ration Initiali-
sierun
g
Verar-
Wert- beit- Ver-
zuweis
-ung
H ungen
Zufalls zweig-
ungen
Ein- zahlen Schlei-
gabe H Kontroll
fen
-struk-
turen
Esc. S H H
Aus-
gabe
For-
mate H
Daten-
struktu
r
Felder
Problem

Speicherung von 1000 Messwerten.


Wie viele Variablennamen will man erfinden?

Antwort:
 Arrays
 Speicherung vieler Werte gleichen Datentyps
unter einem Namen.
Array (Messwerte)
1. Deklaration double [ ] messwerte; //oder double messwerte [ ];

Bei Anlage muss


2. Speicherplatz messwerte = new double[4]; Größe des Arrays
anlegen feststehen.
3. Zugriff auf einen
Wert messwerte[1] = 24;
4

4. Gesamtes Array for (int i = 0 ; i < messwerte.length ; i++)


durchlaufen System.out.print( messwerte[i] + ", ");

21.0, 24.0, 0.52, 23.0,

21 24 0.52 23
0 1 2 3
In Bildern
double [] messwerte= new double[4];
messwerte[2] = 123.458; 4 Schubladen groß.

Wie groß ist messwerte?

we r te
mess

123.458
3
1 2
0

Auf welche Position wird mit dem Position 2.


Indexoperator zugegriffen? Das ist die dritte
Schublade.
Eingabe

noten[index] = input.nextInt();

For(int=0; i<noten.length; i++)


{
System.out.print(“Bitte geben Sie eine
Note ein“");
noten[i] = würfel.nextInt(6)+1;
}
lottozahlen[i] = tombola.nextInt(49) + 1;
Unterschiede Deklaration
Eckige Klammern vor oder Alle Deklarationen
nach Namen? sind int-Arrays.

int [ ] zahlenArray1, zahlenArray2, zahlenArray3;


zahlenArray1 = new int[5];
zahlenArray2 = new int[10]; //usw.
int zahlenArray1[ ], nurEineZahl, zahlenArray2[ ];
zahlenArray1 = new int[5]; Alle Deklarationen haben den
nurEineZahl = 5; Typ int.
zahlenArray2 = new int[10];
[] gehört hier zur Variable:
Nur wenn eckige Klammern
nach dem Namen stehen, ist
es auch ein Array.
Initialisierung und Ungültige Zugriffe

int menge[ ] = {2, 11, 9, 1, 7};


Wie wird die Größe in
diesem Fall bestimmt? Anzahl der Elemente.
new int[5] im Hintergrund

Was passiert hier?


System.out.print( menge[10] );
menge[5] = 15;

löst eine
IndexOutOfBoundsException aus
und bricht ab
Überblick
datentyp [ ] bei der Deklaration:
datentyp [ ] arrayName = new datentyp [ anzahl ];
int anzahl = puselmuckel.nextInt() ; int anzahl = 15;

arrayName[ index ] für den Zugriff auf den Inhalt:


… arrayName [ 0 ] … erster Inhalt

… arrayName [ anzahl - 1] … letzter Inhalt

for( int i = 0; i < arrayName.length; i++)


{
… arrayName [ i ] … alle Inhalte nacheinander
} von Anfang bis Ende
Übung
J07_Erstes_Feld
Erstellen Sie ein Feld mit den Werten
10,11,15,31,122
Geben Sie das Feld aus
Lassen Sie den Benutzer eine Stelle
auswählen und eine Zahl ändern
Geben Sie das Feld aus
Lassen Sie den Computer fünf neue
zufällige Werte bestimmen
Geben Sie das Feld aus
Exkurs Zufallszahlen
Klasse Random für Zufallszahlen. zahlenMaschine
import java.util.Random; Ganzzahl
Random zahlenMaschine = new Random();
positive Ganzzahl 0 – 50
//Da es eine Klasse ist muss sie mit new angelegt werden.
Dezimalzahl
Wahrheitswert

0.1245
-7245
true
45
Eine neue Zahl erzeugt man mit:
intZahl = zahlenMaschine.nextInt();
//positive oder negative Ganzzahl
intZahl = zahlenMaschine.nextInt(obergrenze);
//0 bis < obergrenze
floatZahl = zahlenMaschine.nextFloat();
//von 0 bis unter 1
doubleZahl = zahlenMaschine.nextDouble();
//von 0 bis unter 1
Aufgaben
1a) Erstellen sie das folgende Projekt
Es werden in einer Schleife 5 ganzen Zufallszahlen im Wertebereich 1 bis 49 gezogen.
Anschließend soll zuerst die Summe aller Zahlen berechnet werden und dann das Array
und die Summe ausgegeben werden.
Erstellen Sie das Programm als J07_Zufallszahlen
1b) Lassen Sie die Größe des Arrays vom Benutzer bestimmen.
1c) Geben Sie die geraden Zahlen aus und zählen Sie diese.
1d) Ermitteln Sie die größte und die kleinste Zahl des Arrays.
Vorgehensweise:
Feld deklarieren Int [] gezogene_zahl;
Feldgrösse Gezogene_zahl= new int[5];
Zähle von 0 bis 4
zahl ziehen
zahl ausgeben
for (int i = 0; i < gezogene_zahl.length; i++) {
gezogene_zahl[i] = zahlenMaschine.nextInt(49) + 1;
System.out.println("Gezogene Zahlen: " + gezogene_zahl[i]);
}
Vorgehensweise
1. Bestimmung der Feldgröße
anzahl = in.nextInt();
2. Ziehung der Zufallszahlen
1.Zähle von 0 bis Feldlänge
2.Ziehe Zufallszahl
3.gezogene_zahl[i] = zahlenMaschine.nextInt(49) + 1;
3. Anzahl der geraden Zahlen ermitteln
1.Wenn gerade Zahl dann zähle
(gezogene_zahl[i] % 2 == 0) gerade++;
2.Sonst ungerade++
4. Schreiben Sie einen Algorithmus der keine
doppeltenn Zahlen zulässt
1. Minimum ermitteln
Ersten Wert des Feldes als Minimum setzen
min=gezogene_zahl[0];
1.Zähle von 1 bis feldlänge
Wenn gezogene_zahl[i]<min
Dann min=gezogene_zahl[i];
2.Ausgabe Min
Verhindern von doppelten Zahlen

0 1 2 3 4
16 20 24 34
Random tombola = new Random();
boolean gleicheZahlGefunden = false;
for (int i = 0; i < lottozahlen.length; i++) {
do {Gezogene Zahl 16
34
20
24
20
gleicheZahlGefunden
Vergleiche gezogene Zahl mit = false;
bisher gezogenen
lottozahlen[i]
Zahlen, wenn gleich = tombola.nextInt(49) + 1; bei
dann ziehe neu. Beginne
jeder for (int j = 0;Zahl
gezogenen j < ibei
&&Index
!gleicheZahlGefunden;
0 j++) {
if (lottozahlen[i] == lottozahlen[j])
gleicheZahlGefunden = true;
}
} while (gleicheZahlGefunden == true);
Generator initialisieren
Gezogen =false
6 Zahlen generieren und in lottozahlen mit For Schleife
Generiere neue Zahl solange wie gezogen =true
Do
gezogen false
For Schleife von 0 bis i und gezogen=false
for (int j = 0; j < i && !gleicheZahlGefunden; j++) {
// Zahlen vergleichen
if (lottozahlen[i] == lottozahlen[j])
gleicheZahlGefunden = true;
}

} while (gleicheZahlGefunden == true);


}
}
Kontrollfragen
1. Was unterscheidet die Deklaration eines Arrays von der Deklaration
einer normalen Variablen?
2. Wie deklariert man ein Array für 20 Ganzzahlen?
3. Wie deklariert man ein Array für 13 Zeichen?
4. Wie deklariert man ein Array für 5 Wahrheitswerte?
5. Worin besteht der Unterschied der eckigen Klammern beim
Deklarieren und beim Zugreifen auf einen Speicherplatz?
6. Was ist der allererste Index in einem Array?
7. Wenn ein Array 15 Speicherplätze lang ist, wie lautet die letzte
Indexposition?
8. Wazu benötigt man eine Indexposition?
9. Wie kann ich die Anzahl der Speicherplätze in einem Array
automatisch ermitteln?
10. Welche Kontrollstruktur wird am häufigsten im Zusammenhang mit
Arrays verwendet?
Aufgaben
Aufgabe 2
2a) Schreiben Sie das Programm J07_Noten in dem der Benutzer gefragt
wird, wie viele Noten generiert werden sollen. Ein Array wird in
entsprechender Größe angelegt. Die Noten werden automatisch generiert.
Anschließend wird der Notendurchschnitt berechnet. Alle Noten und der
Schnitt werden ausgegeben.
2b)
Der Benutzer erhält jetzt die Möglichkeit eine Note zu ändern. Er gibt an
welche (z.B. 1. Note). Die zu ändernde Note wird ausgegeben. Er gibt die
neue Note ein. Der Durchschnitt soll daraufhin neu berechnet und
ausgegeben werden.
2c) Wiederholen Sie 3b) so oft wie der Benutzer möchte.
2d) Es dürfen nur Noten zwischen 1 und 6 zugelassen werden.
Alternative 1: Der Benutzer muss so oft die zu ändernde Note
eingeben, bis die Note im erlaubten Bereich liegt.
Alternative 2: Die Änderung im Array erfolgt nur bei zulässiger
Eingabe. Ansonsten bleibt das Array unverändert.
Aufgaben
Aufgabe 3 J07_Lagerverwaltung
Erstellen Sie eine Lagerverwaltung mit folgenden Daten:
String artikel[] ="Fanschal", "Fahne groß", "Fahne klein", "Tasse mit
Logo","Kappe Farbig", "Badetuch","Gartenzwerg"};
einzelpreis []={ 22.00, 99.99, 65.60, 6.90, 12.00, 13.75,23.00};
bestand[]= {200, 0,22,19,0,40,50};
Geben Sie die Felder formatiert aus.
Berechnen Sie die jeweiligen Lagerwerte und geben Sie diese mit der
Artikelbezeichnung, dem Bestand und dem Einzelpreis aus.
Berechnen Sie die Summe der Lagerwerte und geben diesen Wert aus.
Berechnen Sie die Lagerwerte der Artikel mit dem Bestand >0 und geben Sie
diese aus. Berechnen Sie den Mittelwert aller Lagerwerte deren Bestand
>0 ist und geben Sie diesen aus.
Geben Sie die Artikelbezeichnungen der Artikel mit dem Bestand = 0 Meldung
„Bestellstatus prüfen“ und der Artikel mit dem Bestand <50
(Meldebestand) Meldung „Bitte Bestellung veranlassen“ und Bestand
=200 (Maximaler Lagerwert) Meldung „Ladenhütter? prüfen“ aus.
Zusatzaufgaben
Aufgabe
Schreiben Sie ein Programm welches für ein Kniffelspiel jeweils 5
zufällige Würfel-Ergebnisse speichert. Fragen Sie den Spieler, wie viele
Würfel er noch mal "werfen" möchte. Fragen Sie dann jeweils welche
Würfel geworfen werden sollen. Der Spieler darf maximal zwei Mal einen
Teil seiner Würfel noch mal werfen. J07_Kniffel
Beispielausgabe:
1, 5, 1, 1,6
Wie viele neu? 2
Welcher? 2
Welcher? 5
1, 2, 1, 1, 1
Wie viele neu? 1
Welcher? 2
1, 3, 1, 1, 1
Aufgabe
Schreiben Sie ein Programm welches 6 Lottozahlen zwischen 1 und 49
„zieht“. Achten Sie dabei darauf, dass eine gezogene Zahl nicht schon
einmal gezogen wurde. J07_Lotto
Aufgabe 3
Schreiben Sie ein Programm J07_Rollenspiel, welches 7
Prozentwerte zwischen 0% und 100% für die Charaktereigenschaften
(Intelligenz, Stärke, Ausdauer, Geschicklichkeit, Weisheit, Intuition und
Charisma) einer Spielfigur zufällig erzeugt und in einem Array
gespeichert werden. Achtung: Prozentzahlen sind Dezimalzahlen.
0,01 entspricht 1%.
Für die Eigenschaftsbezeichnungen benutzen Sie auch ein Array.
Die Methode Math.round() rundet auf volle Ganzzahlen. Erzeugen
Sie Dezimalzahlen, aber runden Sie auf volle Prozentzahlen, d.h.
Zahlen zwischen 0.00 und 1.00 (Nur 2 Nachkommastellen);
Beispiel zum Runden: 0.123456
 0.123456*100 = 12.3456
 gerundet: 12
 /100.0: 0.12
Aufgaben
Aufgabe 4
Schreiben Sie ein Programm, indem ein Array für 50 Ganzzahlen
angelegt wird. Anschließend sollen alle Zahlen (bei 1 anfangend) , welche
durch eine vom Benutzer zu bestimmende Ziffer (1-9) teilbar ist oder
welche diese Zahl als Einerstelle hat, in das Array geschrieben werden.
Die ersten 50 Zahlen, die der Bedingung entsprechen, sollen im Array
gespeichert werden. Geben Sie das Array am Programmende aus.
J07_AuswahlZahlen

Aufgabe 5
Schreiben Sie Ihr Programm J04a_JavaLernen.java in
J07_JavaLernen.java um. Damit es etwas flexibler wird, erstellen Sie
einen Satz von Fragen in einem Array und einen passenden Satz von
Antworten. Die Antwort für die Frage an Stelle 0 muss auch an Stelle 0
des Antwort-Arrays stehen.
Lassen Sie mit Hilfe einer generierten Zufallszahl zwischen 0 und Array-
Ende eine Frage auswählen und überprüfen Sie die Antwort. Der
Benutzer soll eine Rückmeldung erhalten, ob die von ihm eingegebene
Antwort richtig war, also der Antwort im Array entspricht. Erstellen Sie
mindestens 10 Fragen mit Antworten. Das Programm soll solange laufen,
bis der Nutzer nicht mehr möchte.
Aufgaben
Aufgabe 6
a) Schreiben Sie ein Programm J07_Wechselkurs, welches den Wechselkurs
einer Währung abfragt. Anschließend werden die Tageskurse für eine Woche (7
Tage) eingelesen. Das Programm gibt aus, an wie viel Tagen der Tageskurs
unterhalb des Fixkurses lag, an wie viel Tagen er darüber lag und an wie vielen
Tagen er gleich dem Fixkurs war.
b) Ergänzen Sie das Programm J07_Wechselkurs um die Berechnung der
maximalen Abweichung (nach unten oder oben) und der Ausgabe des
Wochentags an dem die Abweichung auftrat.

Aufgabe 7
Verändern Sie Ihr Zahlenumwandlungsprogramm: Es soll jetzt eine beliebig lange
mehrstellige Zahl eingegeben werden können. Anschließend soll sie anschließend
als Text ausgegeben werden. Das Array erleichtert die Aufgabe, da man die
einzelnen Ziffern in einem Array speichern kann.
Beispiel: 123 eins zwei drei.
J07_Zahlenumwandlung

Aufgabe 8
Verändern Sie Ihr Dualzahlenprogramm aus J02, indem Sie es flexibel gestalten.
J07_Dualzahlen
Aus Java von Kopf bis Fuß S.16-17
Lassen Sie zufällig Phrasen bilden,
solange der Benutzer weiter machen
möchte.
Überlegen Sie sich eigene Begriffe
führen Sie das Programm aus und
benutzen Sie die genau die ausgegeben
Phrase bei Ihrer nächsten Meldung
J07_Phrasomat
Messwerte
int messwerte[];
messwerte = new int[5];
Scanner input= new Scanner(System.in);
int stelle;
int eingabe;
messwerte[0] = 24;
messwerte[1] = 27;
messwerte[2] = 22;
messwerte[3] = 21;
messwerte[4] = 19;
System.out.println("Ausgabe der Werte");
for (int i = 0; i < messwerte.length; i++) {
System.out.println(messwerte[i]);
}
do {
System.out.println("Wählen Sie eine Stelle zwischen 1 und 5 aus): ");
stelle = input.nextInt();
if (stelle < 1 || stelle > 5) {
System.out.println("Nur Zahlen zwischen 1 und 5");
}
} while (stelle < 1 || stelle > 5);
System.out.println("Welchen Wert wollen Sie eingeben: ");
messwerte[stelle-1] = input.nextInt();
System.out.println("Ausgabe der Werte");
for (int i = 0; i < messwerte.length; i++) {
System.out.print( i +". " messwerte[i]+", " );
}
Mehrdimensionale Arrays
int symmetrisch [][]; Symmetrisches Array
symmetrisch = new int [2][3]; mit 2 Zeilen und 3
Spalten  also 6
Speicherplätzen
int nichtSymmetrisch[][];
nichtSymmetrisch = new int [10][ ];
for( int i = 0 ; i < nichtSymmetrisch.length; i++)
Anzahl der
{ Zeilen in der
nichtSymmetrisch[i] = new int[i+1]; Tabelle
System.out.print("Länge Zeile:"+ nichtSymmetrisch[i].length);
}

Anzahl der
Unsymmetrisches Array.
Spalten in der
Anzahl Spalten unterscheidet
Zeile
sich von Zeile zu Zeile.

Das könnte Ihnen auch gefallen