Sie sind auf Seite 1von 45

Kapitel 

Arrays

© Prof. Dr. Steffen Heinzl
Arrays

© Prof. Dr. Steffen Heinzl
Nehmen wir an, wir wollen 10000 
Würfelwürfe simulieren!

© Prof. Dr. Steffen Heinzl
int einser = 0, zweier = 0, dreier = 0, 
vierer = 0, fuenfer = 0, sechser = 0;

for (int i = 0; i < 10000; i++) {


int wurf = (int)(Math.random()*6+1);    
switch(wurf) {
case 1:
einser++; break;
case 2:
zweier++; break;
case 3:
dreier++; break;
case 4:
vierer++; break;
case 5:
fuenfer++; break;
case 6:
sechser++; break;
}
}
System.out.println("1er: " + einser);
System.out.println("2er: " + zweier);
System.out.println("3er: " + dreier);
© Prof. Dr. Steffen Heinzl

int einser = 0, zweier = 0, dreier = 0, 
vierer = 0, fuenfer = 0, sechser = 0;

for (int i = 0; i < 10000; i++) {


int wurf = (int)(Math.random()*6+1);    
switch(wurf) {
case 1:
einser++; break; gleichartige Informationen:
case 2: Zähle bei einer 1 die Einser hoch
zweier++; break; Zähle bei einer 2 die Zweier hoch
case 3:
etc.
dreier++; break;
case 4:
vierer++; break;
case 5:
fuenfer++; break;
case 6:
sechser++; break;
}
}
System.out.println("1er: " + einser);
System.out.println("2er: " + zweier);
System.out.println("3er: " + dreier);
© Prof. Dr. Steffen Heinzl

int einser = 0, zweier = 0, dreier = 0, 
vierer = 0, fuenfer = 0, sechser = 0;

for (int i = 0; i < 10000; i++) {


int wurf = (int)(Math.random()*6+1);    
switch(wurf) {
case 1:
einser++; break; gleichartige Informationen:
case 2: Zähle bei einer 1 die Einser hoch
zweier++; break; Zähle bei einer 2 die Zweier hoch
case 3:
etc.
dreier++; break;
case 4:
Kann man die verschiedenen 
vierer++; break;
case 5:
Variablen kurz auf gleiche Weise 
fuenfer++; break; behandeln?
case 6:
sechser++; break;
}
}
System.out.println("1er: " + einser);
System.out.println("2er: " + zweier);
System.out.println("3er: " + dreier);
© Prof. Dr. Steffen Heinzl

Arrays
 Arrays (auch Felder genannt) werden verwendet, um mehrere 
gleichartige Datentypen zu gruppieren.
/*In dieser Zeile werden 6 Integervariablen deklariert (also ein 
Feld mit 6 Integervariablen) */
int[] zahlen = new int[6];  

 Der new‐Operator gibt eine Referenz auf den angelegten 
Speicherbereich zurück. 
 Nehmen wir an, wir wollen die Lottozahlen speichern:
//In den folgenden Zeilen werden diese mit Werten belegt:
zahlen[0] = 5;  
zahlen[1] = 7;
zahlen[2] = 23;
zahlen[3] = 34;
zahlen[4] = 39;
zahlen[5] = 41;

© Prof. Dr. Steffen Heinzl
Arrays
/*In dieser Zeile werden 6 Integervariablen deklariert (also ein Feld mit 6 
Integervariablen) */
int[] zahlen = new int[6];  

//In den folgenden Zeilen werden diese mit Werten belegt
zahlen[0] = 5;  
zahlen[1] = 7; Der Index in den eckigen Klammern gibt an, 
zahlen[2] = 23; auf welche Variable des Arrays zugegriffen 
zahlen[3] = 34; wird.
zahlen[4] = 39;
zahlen[5] = 41;

© Prof. Dr. Steffen Heinzl
Arrays
/*In dieser Zeile werden 6 Integervariablen deklariert (also ein Feld mit 6 
Integervariablen) */
int[] zahlen = new int[6];  

//In den folgenden Zeilen werden diese mit Werten belegt
zahlen[0] = 5;  
zahlen[1] = 7;
zahlen[2] = 23;
zahlen[3] = 34;
zahlen[4] = 39; Das erste Element des Arrays ist über den Index „0“ zugreifbar, 
zahlen[5] = 41; das zweite Element über den Index „1“, etc.

© Prof. Dr. Steffen Heinzl
Initialisierung und Länge von Arrays
 Eine direkte Initialisierung des Arrays kann in der Deklarationszeile erfolgen:
int[] zahlen = new int[]{5, 7, 23, 34, 39, 41};  

oder kürzer

int[] zahlen = {5, 7, 23, 34, 39, 41};

 Von einem Array kann man über dessen Attribut length die Anzahl der 
Elemente im Array abfragen.

 zahlen.length ergibt in obigem Bsp. den Wert 6.

© Prof. Dr. Steffen Heinzl
int einser = 0, zweier = 0, dreier = 0, 
vierer = 0, fuenfer = 0, sechser = 0;

for (int i = 0; i < 10000; i++) {


int wurf = (int)(Math.random()*6+1);    
switch(wurf) {
case 1:
einser++; break;
case 2:
zweier++; break;
case 3:
dreier++; break;
case 4:
vierer++; break;
case 5:
fuenfer++; break;
case 6:
sechser++; break;
}
}
System.out.println("1er: " + einser);
System.out.println("2er: " + zweier);
System.out.println("3er: " + dreier);
© Prof. Dr. Steffen Heinzl

int[] gewuerfelteSeiten = new int[6];

for (int i = 0; i < 10000; i++) {


int wurf = (int)(Math.random()*6+1);    
switch(wurf) {
case 1:
einser++; break;
case 2:
zweier++; break;
case 3:
dreier++; break;
case 4:
vierer++; break;
case 5:
fuenfer++; break;
case 6:
sechser++; break;
}
}
System.out.println("1er: " + einser);
System.out.println("2er: " + zweier);
System.out.println("3er: " + dreier);
© Prof. Dr. Steffen Heinzl

int[] gewuerfelteSeiten = new int[6];

for (int i = 0; i < 10000; i++) {


int wurf = (int)(Math.random()*6+1);    
switch(wurf) {
case 1:
gewuerfelteSeiten[0]++; break;
case 2:
gewuerfelteSeiten[1]++; break;
case 3:
gewuerfelteSeiten[2]++; break;
case 4:
gewuerfelteSeiten[3]++; break;
case 5:
gewuerfelteSeiten[4]++; break;
case 6:
gewuerfelteSeiten[5]++; break;
}    
}
System.out.println("1er: " + einser);
System.out.println("2er: " + zweier);
System.out.println("3er: " + dreier);
© Prof. Dr. Steffen Heinzl

int[] gewuerfelteSeiten = new int[6];

for (int i = 0; i < 10000; i++) {


int wurf = (int)(Math.random()*6+1);    
switch(wurf) {
case 1:
gewuerfelteSeiten[0]++; break;
case 2:
gewuerfelteSeiten[1]++; break;
case 3:
gewuerfelteSeiten[2]++; break;
case 4:
gewuerfelteSeiten[3]++; break;
case 5:
gewuerfelteSeiten[4]++; break;
case 6:
gewuerfelteSeiten[5]++; break;
}    
}
for (int i = 0; i < gewuerfelteSeiten.length; i++)
{
System.out.println(i+1+"er: " + gewuerfelteSeiten[i]);
© Prof. Dr. Steffen Heinzl
}
int[] gewuerfelteSeiten = new int[6];

for (int i = 0; i < 10000; i++) {


int wurf = (int)(Math.random()*6+1);    
switch(wurf) {
case 1:
gewuerfelteSeiten[      ]++; break;
wurf‐1
case 2: Die Anweisung in jedem 
gewuerfelteSeiten[      ]++; break;
wurf‐1 Case ist jetzt gleich.
case 3:
gewuerfelteSeiten[      ]++; break;
wurf‐1
case 4:
gewuerfelteSeiten[      ]++; break;
wurf‐1
case 5:
gewuerfelteSeiten[      ]++; break;
wurf‐1 Switch‐Case wird jetzt 
case 6: nicht mehr benötigt.
gewuerfelteSeiten[      ]++; break;
wurf‐1
}    
}
for (int i = 0; i < gewuerfelteSeiten.length; i++)
{
System.out.println(i+1+"er: " + gewuerfelteSeiten[i]);
© Prof. Dr. Steffen Heinzl
}
int[] gewuerfelteSeiten = new int[6];

for (int i = 0; i < 10000; i++) {


int wurf = (int)(Math.random()*6+1);    

gewuerfelteSeiten[wurf‐1]++;

}
for (int i = 0; i < gewuerfelteSeiten.length; i++)
{
System.out.println(i+1+"er: " + gewuerfelteSeiten[i]);
© Prof. Dr. Steffen Heinzl
}
int[] gewuerfelteSeiten = new int[6];
for (int i = 0; i < 10000; i++)
{
int wurf = (int)(Math.random()*6+1);  
gewuerfelteSeiten[wurf‐1]++;
}
for (int i = 0; i < gewuerfelteSeiten.length; i++)
{
System.out.println(i+1+"er: " + gewuerfelteSeiten[i]);
}

© Prof. Dr. Steffen Heinzl
Minsort

© Prof. Dr. Steffen Heinzl
Sortieren
68 22 56 34 12 38 9 17

 Der Inhalt der ersten Feld‐Komponente wird als Minimum angesehen (68)!
 In den rechts davon liegenden Feldkomponenten wird ein neues Minimum 
gesucht:
 68 > 22  22 neues Minimum
 22 < 56  kein neues Minimum
 22 < 34  kein neues Minimum
 22 > 12  12 neues Minimum
 12 < 38  kein neues Minimum
 12 >  9  9 neues Minimum
 9 < 17  kein neues Minimum

68 wird mit 9 getauscht !

9 22 56 34 12 38 68 17

© Wolfgang Rauch
Sortieren

 Der Inhalt der  zweiten Feld‐Komponente wird als Minimum angesehen (22)!
 In den rechts davon liegenden Feldkomponenten wird ein neues Minimum 
gesucht:
 22 < 56  kein neues Minimum
 22 < 34  kein neues Minimum
 22 > 12  12 neues Minimum
 12 < 38  kein neues Minimum
 12 < 68  kein neues Minimum
 12 < 17  kein neues Minimum

22 wird mit 12 getauscht !

9 12 56 34 22 38 68 17

© Wolfgang Rauch
Sortieren
9 12 56 34 22 38 68 17

 Der Inhalt der  dritten Feld‐Komponente wird als Minimum angesehen (56)!
 In den rechts davon liegenden Feldkomponenten wird ein neues Minimum 
gesucht:

 56 > 34  34 neues Minimum
 34 > 22  22 neues Minimum
 22 < 38  kein neues Minimum
 22 < 68  kein neues Minimum
 22 > 17  17 neues Minimum

56 wird mit 17 getauscht !

usw. © Wolfgang Rauch
String und char‐Array
 Ein String(‐Objekt) verwendet im Hintergrund ein Array von Einzelbuchstaben (char).
 Ein String stellt im Vergleich zum char‐Array weitere Methoden zur Verfügung, die 
die Arbeit mit Strings erleichtern. 
 Bisher kennen wir:
 equals()
 compareTo()
 Ähnlich wie bei den Arrays gibt es Methoden, um auf die Länge oder auf eine
bestimmte Stelle des Strings zuzugreifen
 length()
 charAt()
 oder das hinter dem String liegende char‐Array zurückgeben.
 toCharArray()

© Prof. Dr. Steffen Heinzl
Methode Beschreibung
length() gibt die Länge des Strings zurück. 
Bsp.: "Hallo".length() gibt 5 zurück
charAt(int i)  gibt den char an der Stelle i zurück. 
Bsp.: "Welt".charAt(0) gibt 'W' zurück, "Welt".charAt(1) gibt 'e' zurück.
toCharArray() gibt das char‐Array zurück, das dem String hinterlegt ist.

© Prof. Dr. Steffen Heinzl
Großbuchstaben zählen mit charAt()

Wie zählt man die Großbuchstaben in einem String?

Man durchläuft den String buchstabenweise …

… und überprüft für jeden Buchstaben, ob er 
im Bereich von 'A' bis 'Z' liegt

© Prof. Dr. Steffen Heinzl
Großbuchstaben zählen mit charAt()

public static int countUpperCaseCharacters(String sentence) 
{
int count = 0;
for (int i = 0; i < sentence.length(); i++)
{ String buchstabenweise 
char c = sentence.charAt(i); durchlaufen
if (c >= 'A' && c <= 'Z')
Großbuchstabe?
{
count++; Zähler erhöhen
}
}
Anzahl Großbuchstaben 
return count;
zurückgeben
}
© Prof. Dr. Steffen Heinzl
Alternative mit toCharArray()
public static int countUpperCaseCharacters2(String sentence)
{
char[] chars = sentence.toCharArray();
int count = 0;
for (int i = 0; i < chars.length; i++)
{
char c = chars[i];
if (c >= 'A' && c <= 'Z')
{
count++;
}
}
return count;
}

© Prof. Dr. Steffen Heinzl
String und char‐Array
 Ein String ist unveränderlich (immutable), d. h. wenn der String verändert werden
würde, wird stattdessen ein neuer String zurückgegeben.

String a = "Hallo";
String b = "Welt";
a + b;
verändert weder a noch b. Stattdessen wird ein neuer String erstellt.

 Interessanter: Mit replace() lassen sich in einem String Buchstaben ersetzen.

© Prof. Dr. Steffen Heinzl
String: replace
 Mit replace() kann ein Einzelzeichen oder eine Zeichenfolge in einer Kopie des 
Strings getauscht werden. Die Kopie wird zurückgegeben.

public static void main(String[] args)
{
String a = "Hallo Welt";
a = a.replace("l", "?"); Ein neuer String mit dem Inhalt
System.out.println(a); Ha??o We?t
} wird zurückgegeben.

© Prof. Dr. Steffen Heinzl
Argumente an die main‐Methode übergeben
 Beim Programmstart kann man Argumente an das zu startende Programm übergeben:
 java Mainparameter Hallo Welt

public class Mainparameter args[0] beinhaltet "Hallo"
{ args[1] beinhaltet "Welt"
public static void main(String[] args)
{
for (int i = 0; i < args.length; i++)
{
System.out.println(args[i]);
}
}
}

© Prof. Dr. Steffen Heinzl
Wenn beim Programmstart Zahlen übergeben werden, 
landen diese in dem String‐Array args als Strings.

Es gibt Möglichkeiten den String in eine Zahl zu konvertieren.

© Prof. Dr. Steffen Heinzl
Primitive Datentypen und Klassen
 Zu jedem primitiven Datentyp gibt es eine entsprechende Klasse:
primitiver Datentyp dazugehörige Klasse
int Integer
float Float
double Double
char Character
boolean Boolean
short Short
byte Byte

Die Klassen verfügen über 
bestimmte Eigenschaften und Methoden.
© Prof. Dr. Steffen Heinzl
Zahlenbereiche: 
Minimalwerte und Maximalwerte
Eigenschaft Wert
Byte.MAX_VALUE 127
Byte.MIN_VALUE ‐128
Short.MAX_VALUE 32767
Short.MIN_VALUE ‐32768
Integer.MAX_VALUE 2147483647
Integer.MIN_VALUE ‐2147483648
Long.MAX_VALUE 9223372036854775807
Long.MIN_VALUE ‐9223372036854775808
Character.MAX_VALUE 65535
Character.MIN_VALUE 0 negativen Wert erhält man 
Float.MAX_VALUE 3.4028235E38 durch Voranstellen eines 
Float.MIN_VALUE 1.4E‐45 Minus 
Double.MAX_VALUE 1.7976931348623157E308 (wenn überhaupt benötigt)
Double.MIN_VALUE 4.9E‐324 © Prof. Dr. Steffen Heinzl
Umwandlung von Strings 
in andere Datentypen
 Jede dieser Klassen hat die statische Methode valueOf(String), die einen 
übergeben String in ein Objekt der entsprechenden Klasse umwandelt.

primitiver Datentyp dazugehörige Klasse


int Integer
float Float
double Double
char Character
boolean Boolean
short Short
byte Byte

Integer.valueOf("25") gibt eine 25 zurück.
© Prof. Dr. Steffen Heinzl
String‐Objekt Integer‐Objekt
Autoboxing und Unboxing
 Eine primitiver Datentyp und Objekte von dessen Klasse waren vor Java 5 nicht 
zuweisungskompatibel.
 Seit Java 5 ist dies aber wie folgt möglich:
 Normale Zuweisung: 
Integer i = new Integer(12);
 (Automatisches) Autoboxing: 
Integer i = 12; /*12 wird automatisch in ein Integer‐Objekt "gepackt" und 
dann erst zugewiesen.*/
 Automatisches Unboxing: 
System.out.println(10 * i); /*Aus dem Integer‐Objekt i wird der int‐Wert 
"entpackt" und mit 10 multipliziert*/

© Prof. Dr. Steffen Heinzl
Übersicht:
Nützliche String Methoden

© Prof. Dr. Steffen Heinzl
String Methoden
 Ein String‐Objekt stellt einige wichtige Methoden bereit:
Methode Beschreibung
length() gibt die Länge des Strings zurück. 
Bsp.: "Hallo".length() gibt 5 zurück
charAt(int i)  gibt den char an der Stelle i zurück. 
Bsp.: "Welt".charAt(0) gibt 'W' zurück, "Welt".charAt(1) gibt 'e' zurück.
substring(int beginIndex,  gibt eine Kopie des Strings aus, die bei dem Buchstaben 
int endIndex) charAt(beginIndex) beginnt und bei inklusive dem Buchstaben 
charAt(endIndex ‐ 1) endet. 
Bsp.: "HalloWelt".substring(1,6); gibt "alloW" zurück

"HalloWelt".substring(1,6); gibt "alloW" zurück

012 3456 78
detailliertere Informationen im Java‐Doc!!
alloW © Prof. Dr. Steffen Heinzl
String Methoden (ctd.)
Methode Beschreibung
compareTo(String s) vergleicht den String buchstabenweise und gibt eine negative 
Zahl zurück, wenn das String‐Objekt vor dem übergebenen 
String im Alphabet kommt.
equalsIgnoreCase(String s) vergleicht das String‐Objekt mit dem übergebenen String ohne 
Groß‐ und Kleinbuchstaben zu berücksichtigen
indexOf(String s) gibt den Index des ersten Vorkommens des Strings s zurück.
replace(old, new) replace() ersetzt in einer Kopie des String‐Objekts die 
Zeichenfolge old mit der Zeichenfolge new
toCharArray() gibt das char‐Array zurück, das dem String hinterlegt ist.
toLowerCase() gibt eine Kopie des Strings in Kleinbuchstaben zurück
toUpperCase() gibt eine Kopie des Strings in Großbuchstaben zurück
startsWith(String prefix) gibt true zurück, wenn die ersten Buchstaben des Strings mit 
dem String prefix übereinstimmen.
contains(string) gibt true zurück, wenn der String die übergebene Zeichenfolge 
beinhaltet.
© Prof. Dr. Steffen Heinzl
String: toLowerCase(), toUpperCase(), 
equalsIgnoreCase()
 toLowerCase() gibt eine Kopie des Strings in Kleinbuchstaben zurück
 toUpperCase() gibt eine Kopie des Strings in Großbuchstaben zurück 
 equalsIgnoreCase() vergleicht das String‐Objekt mit dem 
übergebenen String ohne Groß‐ und Kleinbuchstaben zu berücksichtigen

String a = "Hallo";
System.out.println(a); Hallo
System.out.println(a.toLowerCase()); hallo
System.out.println(a.toUpperCase()); HALLO
if (a.equalsIgnoreCase("hallo")) {

}
true
© Prof. Dr. Steffen Heinzl
String: compareTo()
 compareTo() vergleicht den String buchstabenweise
 Beim ersten nichtgleichen Buchstaben wird angehalten und ausgegeben, um 
wie viele Stellen die beiden Buchstaben auseinanderliegen
 Sind alle Buchstaben bis zum Ende eines der beiden Strings gleich, wird die 
Längendifferenz ausgegeben.
 Ist die ausgegebene Zahl < 0, kommt String a lexikographisch vor String b.

public static void main(String[] args) {
String a = "Awkward";
String b = "Hallo"; Was ergibt? 
String c = "HalloWelt"; System.out.println(c.compareTo(b));
System.out.println(a.compareTo(b));
System.out.println(b.compareTo(a)); ‐7
System.out.println(b.compareTo(c)); 7
}
‐4

© Prof. Dr. Steffen Heinzl
String ausschneiden mit 
indexOf + substring
 Ausschnitt der Wikipedia‐Webseite:
<body id="www‐wikipedia‐org">

<div class="central‐textlogo">
<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bb/
Wikipedia_wordmark.svg/174px‐Wikipedia_wordmark.svg.png" 
</div>

</body>
Wir haben obigen Webseitenausschnitt vorliegen.

Wie können wir mit einem Programm die URL des Bildes 
ausschneiden, um danach das Bild herunterzuladen?

© Prof. Dr. Steffen Heinzl
String seite = "<body id=\"www‐wikipedia‐org\">"
+ "<div class=\"central‐textlogo\">"
+ "<img src=\"http://upload.wikimedia.org/wikipedia/commons/thumb"
+ "/b/bb/Wikipedia_wordmark.svg/174px‐Wikipedia_wordmark.svg.png\""
+ "</div>"
+ "</body>"; Seitenausschnitt wird als String benötigt. 
(Auch aus Datei oder aus dem Internet mgl.)

int startIndex = seite.indexOf("<img src=\""); Suche nach 


Beginn der URL

© Prof. Dr. Steffen Heinzl
String seite = "<body id=\"www‐wikipedia‐org\">"
+ "<div class=\"central‐textlogo\">"
+ "<img src=\"http://upload.wikimedia.org/wikipedia/commons/thumb"
+ "/b/bb/Wikipedia_wordmark.svg/174px‐Wikipedia_wordmark.svg.png\""
+ "</div>"
+ "</body>";

startIndex

int startIndex = seite.indexOf("<img src=\""); Suche nach 


Beginn der URL

© Prof. Dr. Steffen Heinzl
String seite = "<body id=\"www‐wikipedia‐org\">"
+ "<div class=\"central‐textlogo\">"
+ "<img src=\"http://upload.wikimedia.org/wikipedia/commons/thumb"
+ "/b/bb/Wikipedia_wordmark.svg/174px‐Wikipedia_wordmark.svg.png\""
+ "</div>"
+ "</body>";

startIndex

int startIndex = seite.indexOf("<img src=\""); Suche nach 


if (startIndex != ‐1)
Beginn der URL
{
startIndex = startIndex + "<img src=\"".length();

© Prof. Dr. Steffen Heinzl
String seite = "<body id=\"www‐wikipedia‐org\">"
+ "<div class=\"central‐textlogo\">"
+ "<img src=\"http://upload.wikimedia.org/wikipedia/commons/thumb"
+ "/b/bb/Wikipedia_wordmark.svg/174px‐Wikipedia_wordmark.svg.png\""
+ "</div>"
+ "</body>";

startIndex endIndex

int startIndex = seite.indexOf("<img src=\"");


if (startIndex != ‐1)
{
startIndex = startIndex + "<img src=\"".length();
int endIndex = seite.indexOf('\"', startIndex);

© Prof. Dr. Steffen Heinzl
String seite = "<body id=\"www‐wikipedia‐org\">"
+ "<div class=\"central‐textlogo\">"
+ "<img src=\"http://upload.wikimedia.org/wikipedia/commons/thumb"
+ "/b/bb/Wikipedia_wordmark.svg/174px‐Wikipedia_wordmark.svg.png\""
+ "</div>"
+ "</body>";

startIndex endIndex

int startIndex = seite.indexOf("<img src=\"");


if (startIndex != ‐1)
{
startIndex = startIndex + "<img src=\"".length();
int endIndex = seite.indexOf('\"', startIndex);
String url = seite.substring(startIndex, endIndex);
System.out.println(url);
Download des Bildes?
}
In einem späteren Semester 
© Prof. Dr. Steffen Heinzl

Das könnte Ihnen auch gefallen