Sie sind auf Seite 1von 77

Arrays und Exceptions

Adrian Schüpbach
adrian_laurent.schuepbach@alumni.ethz.ch

c Adrian Schüpbach Programmieren und Problemlösen – FS16


Worum geht es?

I Arrays
I Was sind Arrays?
I Wozu braucht man Arrays?
I Wie stehen Arrays in Zusammenhang mit Schleifen?
I Exceptions bei Arrays
I Was passiert bei Fehlern?

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 2


Arrays

I Gesehen
I Variablen speichern Daten
I Variablen haben Datentyp
I Eine Variable ⇔ eine Zahl ...
I ... unflexibel, wenn viele Daten bearbeitet werden sollen
I Arrays
I Tabelle gleichartiger Variablen
I Grösse definierbar

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 3


Arrays

I Deklaration
I int[] zahlen;
I boolean[] wahrheitswerte;

I Der Arrayname zeigt auf die Tabelle (das Array)


I Arrays müssen zuerst erzeugt werden
I Z.Bsp. 5 Zahlen ...
I zahlen = new int[5];
I ... und 17 Wahrheitswerte
I wahrheitswerte = new boolean[17];

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 4


Arrays
I Variable deklarieren: int[] z;
z

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 5


Arrays
I Variable deklarieren: int[] z;
z

I Array erzeugen: z = new int[5];


z z [0] z [1] z [2] z [3] z [4]

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 5


Arrays
I Variable deklarieren: int[] z;
z

I Array erzeugen: z = new int[5];


z z [0] z [1] z [2] z [3] z [4]

I z zeigt auf das Array...


I ...aber erst, nachdem es erstellt wurde
I ...ansonsten zeigt es nirgendwo hin: null

I Elemente werden indiziert


I Index beginnt bei 0 und endet bei Arraygrösse - 1

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 5


Arrays
Zugriff
I Array hat Array-Typ bestehend aus
I Typ einer einzelnen Variable
I [] als Array-Indikator
I Array-Elemente
I Wie einzelne Variablen behandeln
I Können gelesen und geschrieben werden
I Haben Typ einer einzelnen Variable
I Mittels Array-Name und Index zugreifen

Array-Beispiele

int [] z = new int [2]; int a = 3; int r;

z[0] = a;
z[1] = 19;
r = z[0];

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 6


Arrays
Länge

I Arrays haben eine Länge


I Kann nur gelesen werden
I int laenge = z.length;

Array-Länge abfragen

int [] z = new int [2 + 3 - 1];

int laenge = z. length ;

System .out. println (" Arraylaenge = " + laenge );

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 7


Arrays
Beispiel

I Aufgabe: Summe aller Elemente eines Arrays berechnen

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 8


Arrays
Beispiel

I Aufgabe: Summe aller Elemente eines Arrays berechnen


I Voraussetzungen
I Array ist erzeugt (nicht null)
I Elemente des Arrays sind Zahlen (boolean geht nicht)

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 8


Arrays
Beispiel

I Aufgabe: Summe aller Elemente eines Arrays berechnen


I Voraussetzungen
I Array ist erzeugt (nicht null)
I Elemente des Arrays sind Zahlen (boolean geht nicht)

I Algorithmus finden

I Wichtig: Algorithmus flexibel programmieren


I Zählschleife nicht mit fixem Zählwert programmieren
I → Länge des Arrays für Zählschleife verwenden

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 8


Arrays
Beispiel

I Aufgabe: Summe aller Elemente eines


Arrays berechnen

I Algorithmus
1. Variable, die die Summe enthält,
erstellen
2. Variable mit 0 initialisieren
3. Zählschleife (for-Schleife) erstellen
4. Im Anweisungsblock
I Zählvariable benutzen, um
Array-Element zu lesen
I Aktuelles Element zur Summenvariable
addieren

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 9


Arrays
Beispiel
int[] z =
new int[4];
int summe
= 0;
I Aufgabe: Summe aller Elemente eines
Arrays berechnen
int i = 0;

I Algorithmus
1. Variable, die die Summe enthält,
erstellen
2. Variable mit 0 initialisieren
3. Zählschleife (for-Schleife) erstellen
4. Im Anweisungsblock summe
i< true
I Zählvariable benutzen, um z.length? += z[i];

Array-Element zu lesen
I Aktuelles Element zur Summenvariable false

addieren Ausgabe
der i++;
Summe

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 9


Arrays
Beispiel
Summe aller Array-Elemente berechnen

public class Programm9 {


public static void main( String [] args) {
int summe = 0;
int [] z;
z = new int [4];
z[0] = 3;
z[1] = 5;
z[2] = 1;
z[3] = 10;

// Summe
for (int i = 0; i < z. length ; i++) {
summe += z[i];
}
}
Programmieren und Problemlösen – FS16 c Adrian Schüpbach 10
Array-Initialisierung

I Arrays können – wie Variablen – bei der Deklaration


initialisiert werden
I int[] z = {1,5,3,7};
I Array z hat vier Elemente
I Die vier Elemente haben einen Wert
I Array kann benutzt werden

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 11


Array-Initialisierung

Direkte Array-Initialisierung

public class Programm10 {


public static void main( String [] args) {
int summe = 0;
int [] z = {1 ,5 ,3 ,7};

// Summe
for (int i = 0; i < z. length ; i++) {
summe += z[i];
}
}
}

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 12


Zuweisungen von Arrays

I Array-Variablen können anderen Array-Variablen zugewiesen


werden
I Wichtiger Unterschied:
I “Normale” Variablen
I Wert wird kopiert
I Array-Variablen
I Zeiger auf das Array wird kopiert
I Array (Inhalt) wird nicht kopiert

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 13


Zuweisungen von Arrays
int z[] = new int[5];
z z [0] z [1] z [2] z [3] z [4]

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 14


Zuweisungen von Arrays
int z[] = new int[5];
z z [0] z [1] z [2] z [3] z [4]

I Zuweisung von z zu x
I Der Zeiger (Pfeil) wird
von z nach x kopiert
I Array wird nicht kopiert
I Die Array-Elemente können
auch über x[i] benutzt werden

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 14


Zuweisungen von Arrays
int z[] = new int[5];
z z [0] z [1] z [2] z [3] z [4]

I Zuweisung von z zu x
I Der Zeiger (Pfeil) wird
von z nach x kopiert
I Array wird nicht kopiert
I Die Array-Elemente können
auch über x[i] benutzt werden
int x[] = z;
x

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 14


Zuweisungen von Arrays

int z[] = new int[5];


z z [0] z [1] z [2] z [3] z [4]

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 15


Zuweisungen von Arrays

int z[] = new int[5];


z z [0] z [1] z [2] z [3] z [4]

int x[] = z;

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 15


Zuweisungen von Arrays

int z[] = new int[5];


z z [0] z [1] z [2] z [3] z [4]

int x[] = z;

int x[] = new int[5];

x x [0] x [1] x [2] x [3] x [4]

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 15


Zuweisungen von Arrays

int z[] = new int[5];


z z [0] z [1] z [2] z [3] z [4]

int x[] = z;

int x[] = new int[5];

x = null;
x x [0] x [1] x [2] x [3] x [4]

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 15


Löschen von Arrays

I Zuweisung von null einer Array-Variable


I ⇒ zeigt nicht mehr auf Array

I Kann und darf nicht mehr auf Array-Elemente zugreifen

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 16


Löschen von Arrays

I Zuweisung von null einer Array-Variable


I ⇒ zeigt nicht mehr auf Array

I Kann und darf nicht mehr auf Array-Elemente zugreifen

I Was passiert mit dem Array?


I Falls andere Variable noch darauf zeigt → ok
I Falls keine Variable darauf zeigt → System löscht Array

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 16


Wozu braucht man Arrays?

I Daten organisieren, z.Bsp.


I Messwerte (int, double)

I Pfad in Form von Koordinaten (double)


I “Belegunsplan” einiger (Klassen-, ...)Räume (boolean)
I “Personendaten” mehrerer Personen
I ...
I Index, um schnelle Abfragen zu ermöglichen

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 17


Beispiel: Wie oft kommt die Zahl N vor?
Z.Bsp. N = 6

I Gegeben:
I Grosse Menge zufälliger oder gemessener Zahlen
I Kleinste Zahl: 0
I Grösste Zahl: 9
I Zahlen in unsortiertem Array gegeben
I Gesucht
I Wie oft kommt die Zahl 6 vor?

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 18


Beispiel: Wie oft kommt die Zahl N vor?
Z.Bsp. N = 6

I Algorithmus
1. Erzeuge “Index-Array” mit höchstem Index 9
I ⇒ 10 Elemente!
2. Schleife über alle gegebene Zahlen
I Zahl als Index benutzen
I “Index-Array” an diesem Index um eins erhöhen
3. Im “Index-Array” bei Index 6 nachschauen, wie hoch der
Zähler steht

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 19


Beispiel: Wie oft kommt die Zahl N vor?
Z.Bsp. N = 6

z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]

6 3 2 9 1 7 6 8 0 7

in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]

0 0 0 0 0 0 0 0 0 0

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 20


Beispiel: Wie oft kommt die Zahl N vor?
Z.Bsp. N = 6

z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]

6 3 2 9 1 7 6 8 0 7

in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]

0 0 0 0 0 0 1 0 0 0

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 20


Beispiel: Wie oft kommt die Zahl N vor?
Z.Bsp. N = 6

z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]

6 3 2 9 1 7 6 8 0 7

in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]

0 0 0 1 0 0 1 0 0 0

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 20


Beispiel: Wie oft kommt die Zahl N vor?
Z.Bsp. N = 6

z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]

6 3 2 9 1 7 6 8 0 7

in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]

0 0 1 1 0 0 1 0 0 0

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 20


Beispiel: Wie oft kommt die Zahl N vor?
Z.Bsp. N = 6

z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]

6 3 2 9 1 7 6 8 0 7

in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]

0 0 1 1 0 0 1 0 0 1

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 20


Beispiel: Wie oft kommt die Zahl N vor?
Z.Bsp. N = 6

z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]

6 3 2 9 1 7 6 8 0 7

in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]

0 1 1 1 0 0 1 0 0 1

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 20


Beispiel: Wie oft kommt die Zahl N vor?
Z.Bsp. N = 6

z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]

6 3 2 9 1 7 6 8 0 7

in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]

0 1 1 1 0 0 1 1 0 1

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 20


Beispiel: Wie oft kommt die Zahl N vor?
Z.Bsp. N = 6

z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]

6 3 2 9 1 7 6 8 0 7

in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]

0 1 1 1 0 0 2 1 0 1

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 20


Beispiel: Wie oft kommt die Zahl N vor?
Z.Bsp. N = 6

z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]

6 3 2 9 1 7 6 8 0 7

in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]

0 1 1 1 0 0 2 1 1 1

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 20


Beispiel: Wie oft kommt die Zahl N vor?
Z.Bsp. N = 6

z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]

6 3 2 9 1 7 6 8 0 7

in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]

1 1 1 1 0 0 2 1 1 1

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 20


Beispiel: Wie oft kommt die Zahl N vor?
Z.Bsp. N = 6

z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]

6 3 2 9 1 7 6 8 0 7

in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]

1 1 1 1 0 0 2 2 1 1

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 20


Beispiel: Wie oft kommt die Zahl N vor?
Z.Bsp. N = 6
Zählen, wie oft jede Zahl vorkommt

public class Programm11 {


public static void main( String [] args) {
int gesuchte_zahl = 6;

int [] zahlen = {6 ,3 ,2 ,9 ,1 ,7 ,6 ,8 ,0 ,7};


int [] index = new int [10];

// Schleife ueber alle gegebenen Zahlen


for (int i = 0; i < zahlen . length ; i++) {
index [ zahlen [i ]]++;
}
System .out. println ( gesuchte_zahl +" kommt " +
index [ gesuchte_zahl ] +
" mal vor.");
}
Programmieren und Problemlösen – FS16 c Adrian Schüpbach 21
Beispiel: Wie oft kommt die Zahl N vor?
Z.Bsp. N = 6

Kompakt Ausgeschrieben

for (int i = 0; i < z... { for (int i = 0; i < z... {


// lese zahlen [i] und int zw = zahlen [i];
// benutze als Index in int iw = index [zw ];
// index [], erhoehe um 1 iw = iw + 1;
index[ zahlen [i ]]++; index [zw] = iw;
} }

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 22


Mehrdimensionale Arrays

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 23


Mehrdimensionale Arrays

I Gesehen: Eindimensionale Arrays (Liste/Vektor)


I Arrays können mehrdimensional sein
I Matrix
I Zeilen und Spalten

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 23


Mehrdimensionale Arrays

I Deklaration: int[][] eineMatrix;


I Erzeugung:
eineMatrix = new int[ANZAHL_ZEILEN][ANZAHL_SPALTEN];

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 24


Mehrdimensionale Arrays

int z[][] = new int[5][7];


z z[0] [0] z[0] [1] z[0] [2] z[0] [3] z[0] [4] z[0] [5] z[0] [6]

z [0]

z[1] [0] z[1] [1] z[1] [2] z[1] [3] z[1] [4] z[1] [5] z[1] [6]

z [1]

z[2] [0] z[2] [1] z[2] [2] z[2] [3] z[2] [4] z[2] [5] z[2] [6]

z [2]

z[3] [0] z[3] [1] z[3] [2] z[3] [3] z[3] [4] z[3] [5] z[3] [6]

z [3]

z[4] [0] z[4] [1] z[4] [2] z[4] [3] z[4] [4] z[4] [5] z[4] [6]

z [4]

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 25


Mehrdimensionale Arrays

I Zugriff auf ein Element (Zeile 3, Spalte 5):


int a = eineMatrix[3][5];

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 26


Mehrdimensionale Arrays

I Zugriff auf ein Element (Zeile 3, Spalte 5):


int a = eineMatrix[3][5];

I Zugriff auf eine ganze Zeile (Zeile 4):


int[] a = eineMatrix[4];
I Zugriff ohne Spaltennummer ⇒ Ganze Zeile als Array

benutzen
I Rückgabe hier: int[] zeile = eineMatrix[4];
I zeile.length == 7

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 26


Mehrdimensionale Arrays
Zugriff auf alle Elemente

I Alle Elemente der Reihe nach benutzen


I Zwei verschachtelte for-Schleifen

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 27


Mehrdimensionale Arrays
Zugriff auf alle Elemente

I Alle Elemente der Reihe nach benutzen


I Zwei verschachtelte for-Schleifen

I Innere Schleife
I Schleife über Spalten einer Zeile
I Spaltennummer bei jeder Iteration erhöhen
I Zeilennummer von äusseres Schleife gegeben
I Zugriff auf Element

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 27


Mehrdimensionale Arrays
Zugriff auf alle Elemente

I Alle Elemente der Reihe nach benutzen


I Zwei verschachtelte for-Schleifen

I Innere Schleife
I Schleife über Spalten einer Zeile
I Spaltennummer bei jeder Iteration erhöhen
I Zeilennummer von äusseres Schleife gegeben
I Zugriff auf Element
I Äussere Schleife
I Schleife über alle Zeilen
I Zeilennummer in jeder Iteration erhöhen
I Innere for-Schleife in jeder Iteration aufrufen

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 27


Mehrdimensionale Arrays
Beispiel: Ganze Matrix anzeigen

Matrix auf Bildschirm ausgeben

public class Programm12 {


public static void main( String [] args) {
int [][] matrix = new int [7][12];

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


for (int j = 0; j < matrix [i]. length ; j++) {
System .out. print ( matrix [i][j] + "\t");
}
System .out. println ();
}
}
}

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 28


Ungültiger Index

I Ein Array beginnt immer bei Index 0


I Ein Array hat eine fixe Grösse

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 29


Ungültiger Index

I Ein Array beginnt immer bei Index 0


I Ein Array hat eine fixe Grösse

I Was passiert bei negativem oder zu grossem Index?

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 29


Ungültiger Index
Beispiel

Index zeigt ausserhalb des Arrays

public class Programm13 {


public static void main( String [] args) {
int [] zahlen = new int [10];

int z1 = zahlen [1];


int z2 = zahlen [10];
}
}

Exception in thread “main”


java.lang.ArrayIndexOutOfBoundsException: 10 at
test.Programm13.main(Programm13.java:6)

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 30


Ungültiger Index

I Das Laufzeitsystem (die Java-VM)...


I ... prüft, ob der Index gültig ist
I ... “wirft” Fehlermeldung (Exception), bei ungültigem Index

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 31


Ungültiger Index

I Das Laufzeitsystem (die Java-VM)...


I ... prüft, ob der Index gültig ist
I ... “wirft” Fehlermeldung (Exception), bei ungültigem Index

I Das ist etwas Gutes!


I Hilft, Programmierfehler zu finden
I Zeigt Datei, Funktion, Zeilennummer und fehlerhaften Wert an
I Programm wird “sauber” beendet

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 31


Mehrdimensionale Arrays: Welche Berge sind in der
Nähe?

I Gegeben: Berge mit Koordinaten


I Gesucht: Berge, die innerhalb einer gegebenen Distanz zu
einem gegebenen Punkt sind

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 32


Mehrdimensionale Arrays: Welche Berge sind in der
Nähe?

I Gegeben: Berge mit Koordinaten


I Gesucht: Berge, die innerhalb einer gegebenen Distanz zu
einem gegebenen Punkt sind

I Algorithmus
I Schweiz in Koordinaten eingeteilt (CH1903)
I Zweidimensionales Array, das Koordinaten in km enthält
I Koordinaten der Berge lesen und Berg in richtiges
“Quadrätchen” im Array speichern

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 32


Mehrdimensionale Arrays: Welche Berge sind in der
Nähe?

I Array
I Zeile ⇔ x-Wert (km)
I Spalte ⇔ y-Wert (km)

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 33


Mehrdimensionale Arrays: Welche Berge sind in der
Nähe?

I Array
I Zeile ⇔ x-Wert (km)
I Spalte ⇔ y-Wert (km)

I Problem: Was passiert, wenn zwei Berge sehr nahe sind?


I Braucht zwei Einträge im gleichen “Quadrätchen”

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 33


Mehrdimensionale Arrays: Welche Berge sind in der
Nähe?

I Array
I Zeile ⇔ x-Wert (km)
I Spalte ⇔ y-Wert (km)

I Problem: Was passiert, wenn zwei Berge sehr nahe sind?


I Braucht zwei Einträge im gleichen “Quadrätchen”
I Lösung: Dreidimensionales Array
I Zeile: x-Wert
I Spalte: y-Wert
I Dritte Dimension: Berg 0, 1, ..., n an der “gleichen” Stelle

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 33


Mehrdimensionale Arrays: Welche Berge sind in der
Nähe?

I Abfragen
I Benutzer gibt x- und y-Wert an
I Könnte ein Array von mehreren Abfragen erstellen
I Abfragen verarbeiten
I Programm: Direkter Zugriff auf erste zwei Dimensionen
I → Resultat: Array mit Berg-IDs (dritte Dimension)
I Schleife über dieses Array
I Ausgabe der Berg-IDs

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 34


Mehrdimensionale Arrays: Welche Berge sind in der
Nähe?

→ Demo: 1 Abfrage, mehrere Abfragen

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 35


Mehrdimensionale Arrays: Welche Berge sind grob
innerhalb von 10km?

I Abfragen
I Benutzer gibt Abfrage-Array an (x- und y-Werte)
I Benutzer gibt Radius ein (z.Bsp. 10km)

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 36


Mehrdimensionale Arrays: Welche Berge sind grob
innerhalb von 10km?

I Abfragen
I Benutzer gibt Abfrage-Array an (x- und y-Werte)
I Benutzer gibt Radius ein (z.Bsp. 10km)
I Wie macht man das?

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 36


Mehrdimensionale Arrays: Welche Berge sind grob
innerhalb von 10km?

I Abfragen
I Benutzer gibt Abfrage-Array an (x- und y-Werte)
I Benutzer gibt Radius ein (z.Bsp. 10km)
I Wie macht man das?
I Lösung
I Nicht fixen x-Wert, sondern Intervall von x-Werten
I Hälfte des Radius vor und nach gegebenem x-Wert
I Intervall von y-Werten

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 36


Mehrdimensionale Arrays: Welche Berge sind grob
innerhalb von 10km?

I Abfragen
I Benutzer gibt Abfrage-Array an (x- und y-Werte)
I Benutzer gibt Radius ein (z.Bsp. 10km)
I Wie macht man das?
I Lösung
I Nicht fixen x-Wert, sondern Intervall von x-Werten
I Hälfte des Radius vor und nach gegebenem x-Wert
I Intervall von y-Werten
I Verschachtelte Schleifen, um x- und y-Intervalle zu durchlaufen

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 36


Mehrdimensionale Arrays: Welche Berge sind in der
Nähe?

→ Demo

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 37


Design “Bergdatenstruktur”

I Vorteile

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 38


Design “Bergdatenstruktur”

I Vorteile
I Schnelle Datenstruktur
I Kann direkt an richtige Stelle im Array Werte auslesen
I Einfach zu programmieren
I Nachteile

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 38


Design “Bergdatenstruktur”

I Vorteile
I Schnelle Datenstruktur
I Kann direkt an richtige Stelle im Array Werte auslesen
I Einfach zu programmieren
I Nachteile
I Zu grosser Speicherverbrauch
I Westlichster und südlichster Teil des Arrays nie benutzt

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 38


Design “Bergprogramm”

I Radius 1000km sollte alle Berge enthalten


I → Demo: Versuch mit Radius 1000km

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 39


Design “Bergprogramm”

I Radius 1000km sollte alle Berge enthalten


I → Demo: Versuch mit Radius 1000km
I Exception in thread “main”
java.lang.ArrayIndexOutOfBoundsException: -296 at
berga.NachbarBerge10km.main(NachbarBerge10km.java:23)
I ⇒ Programm sollte nur innerhalb des Koordinatensystems
nach Bergen suchen

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 39


Design “Bergprogramm”

I Radius 1000km sollte alle Berge enthalten


I → Demo: Versuch mit Radius 1000km
I Exception in thread “main”
java.lang.ArrayIndexOutOfBoundsException: -296 at
berga.NachbarBerge10km.main(NachbarBerge10km.java:23)
I ⇒ Programm sollte nur innerhalb des Koordinatensystems
nach Bergen suchen

I Zwei Lösungsansätze:

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 39


Design “Bergprogramm”

I Radius 1000km sollte alle Berge enthalten


I → Demo: Versuch mit Radius 1000km
I Exception in thread “main”
java.lang.ArrayIndexOutOfBoundsException: -296 at
berga.NachbarBerge10km.main(NachbarBerge10km.java:23)
I ⇒ Programm sollte nur innerhalb des Koordinatensystems
nach Bergen suchen

I Zwei Lösungsansätze:
I Zusätzliche UND-Bedingung (halbe Lösung)
I min und max berechnen, dann Schleife

Programmieren und Problemlösen – FS16 c Adrian Schüpbach 39

Das könnte Ihnen auch gefallen