Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]

Slides:



Advertisements
Ähnliche Präsentationen
Imperative Programmierung
Advertisements

(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
der Universität Oldenburg
der Universität Oldenburg
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Sortierverfahren Richard Göbel.
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
ARRAY oder FELD oder VEKTOR
Processing: Arrays & Laden von Dateien Aufbauend auf dem Beispiel: File I/O LoadFile1.
Imperative Programmierung
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
DVG Felder1 Felder. DVG Felder 2 Was sind Felder? Felder sind Reihungen aus endlich vielen Elementen gleichen Typs. Z.B.: Vektoren : (x.
DVG Klassen und Objekte
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
Einführung in die Programmierung Datensammlung
Einführung in die Programmierung Anweisungen und Datentypen
Grundkonzepte Java - Klassendefinition
Java programmieren mit JavaKara
Wieder und wieder und wieder …. Nicht vor Pilz? ja Schritt vorwärts.
Wenn Programme Entscheidungen fällen müssen, dann …
Guten Nachmittag!.
Wir haben gesehen Das Gerüst ist bei JavaKara fix vorgegeben
IT2 – WS 2005/20061Oct 10, 2005 Externes Verhalten – Quelltext (source code) Durch Aufrufe der Konstruktoren und Methoden kann das externe Verhalten (=die.
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Grundlagen der Programmierung
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Dynamische Datentypen
Einführung in JavaKara
Variablenkonzept Klassisch, in Java Basistyp
1. Entwicklungsumgebung 2. Kontextmenü 3. Compile 4. Objekt 5. Attribut 6. Klasse 7. Deklaration 8. Intialisierung.
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
Arrays und ArrayLists In JAVA.
Gestern: Kara Steuerung: Endliche Automaten.
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Programmiervorkurs WS 2014 Referenzdatentypen
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Arrays und ArrayLists In JAVA.
Einführung Blue J. Inhaltsverzeichnis  Definition  Vokabeln.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
JavaKara programmieren: Methoden
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer);
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
JavaKara programmieren: Verzweigungen
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Implementieren von Klassen
Felder in der Informatik
 Präsentation transkript:

Vom Umgang mit Daten

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); }

Wert in Feld speichern Grösse des Feldes auslesen Variable saeulenWerte deklarieren: Feld mit int Werten Variable saeulenWerte initialisieren: so viele Felder, wie Welt breit ist (world.getSizeX()) Variable saeulenWerte deklarieren: Feld mit int Werten Variable saeulenWerte initialisieren: so viele Felder, wie Welt breit ist (world.getSizeX()) public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; // im Beispiel der vorigen Seite kann jetzt auf die Feld- // Elemente saeulenWerte[0], saeulenWerte[1], // saeulenWerte[2] zugegriffen werden for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); }

Wert eines Elements des Feldes auslesen Grösse des Feldes auslesen Parameter saeulenWerte deklarieren: Feld mit int Werten void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); }

int[] saeulenWerte = new int[world.getSizeX()]; Variablen speichern Daten. Sie sind von einem bestimmten Typ. saeulenWerte ist eine Variable vom Typ «Array von Ganzzahlen». Array bedeutet: Eine feste (nicht-veränderliche) Anzahl von Daten vom gleichen Typ, die über einen Index von 0.. angesprochen werden. Variablen müssen definiert werden, d.h. ihr Typ muss festgelegt werden: int[] saeulenWerte. Variablen müssen initialisiert werden, d.h. es muss ihnen ein erster Wert zugewiesen werden: new int[world.getSizeX()]. Anschliessend haben alle Elemente den Wert 0: saeulenWerte[0] = saeulenWerte[1] =... = saeulenWerte[world.getSizeX()-1] = 0. Variablen können beliebig verändert werden: saeulenWerte[0] = 10; // ändert den Inhalt des ersten Arrayelements

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } Methode myProgram Globaler Speicher für das ganze Programm

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } int[] saeulenWerte Methode myProgram int[3] = { 0, 0, 0 } Auf dem «Notizzettel» der Methode ist nur mehr ein Verweis auf die Daten, die unabhängig von der Methode auf einem «globalen Notizzettel» existieren. Globaler Speicher für das ganze Programm

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } int i = 0 int[] saeulenWerte Methode myProgram int[3] = { 0, 0, 0 } Globaler Speicher für das ganze Programm

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } int i = 0 int[] saeulenWerte Methode myProgram int[3] = { 3, 0, 0 } Globaler Speicher für das ganze Programm

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } int i = 1 int[] saeulenWerte Methode myProgram int[3] = { 3, 4, 0 } Globaler Speicher für das ganze Programm

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } int i = 2 int[] saeulenWerte Methode myProgram int[3] = { 3, 4, 5 } Globaler Speicher für das ganze Programm

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } int[] saeulenWerte Methode myProgram int[3] = { 3, 4, 5 } Globaler Speicher für das ganze Programm

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } int[] saeulenWerte Methode myProgram int[3] = { 3, 4, 5 } int[] saeulenHoehen Methode zeichneSaeulen Diagramm Die Methode zeichneSaeulenDiagramm hat einen eigenen Verweis auf die eigentlich Daten. Kann daher die gleichen Daten verändern wie myProgram. Globaler Speicher für das ganze Programm

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } int[] saeulenWerte Methode myProgram int[3] = { 3, 4, 5 } int x = 0 int[] saeulenHoehen Methode zeichneSaeulen Diagramm Globaler Speicher für das ganze Programm

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } int[] saeulenWerte Methode myProgram int[3] = { 3, 4, 5 } int y = 0 int x = 0 int[] saeulenHoehen Methode zeichneSaeulen Diagramm Globaler Speicher für das ganze Programm

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } int[] saeulenWerte Methode myProgram int[3] = { 3, 4, 5 } int y = 0 int x = 0 int[] saeulenHoehen Methode zeichneSaeulen Diagramm Globaler Speicher für das ganze Programm

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } int[] saeulenWerte Methode myProgram int[3] = { 3, 4, 5 } int y = 1 int x = 0 int[] saeulenHoehen Methode zeichneSaeulen Diagramm Globaler Speicher für das ganze Programm

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } int[] saeulenWerte Methode myProgram int[3] = { 3, 4, 5 } int y = 2 int x = 0 int[] saeulenHoehen Methode zeichneSaeulen Diagramm Globaler Speicher für das ganze Programm

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } int[] saeulenWerte Methode myProgram int[3] = { 3, 4, 5 } int y = 4 int x = 2 int[] saeulenHoehen Methode zeichneSaeulen Diagramm Globaler Speicher für das ganze Programm

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } int[] saeulenWerte Methode myProgram int[3] = { 3, 4, 5 } Methode zeichneSaeulen Diagramm Globaler Speicher für das ganze Programm

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } Methode myProgram int[3] = { 3, 4, 5 } Globaler Speicher für das ganze Programm Endet eine Methode, werden alle Daten ihres Notizzettels abgeräumt. Die Daten des «globalen Notizzettel» werden automatisch abgeräumt, irgendwann nachdem sie nicht mehr benötigt werden («Garbage Collection»).

public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i] = tools.intInput("Wert für Säule " + i); } zeichneSaeulenDiagramm(saeulenWerte); } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { for (int x = 0; x < saeulenHoehen.length; x++) { for (int y = 0; y < saeulenHoehen[x]; y++) { world.setLeaf(x, world.getSizeY() y, true); } Methode myProgram int[3] = { 3, 4, 5 } «Kurzzeit- gedächtnis» der Methoden, lokaler Speicher («Stack») «Langzeit- gedächtnis» des gesamten Programms, globaler Speicher («Heap»)

Der Parameter saeulenHoehen ist innerhalb der Methode zeichneSaeulenDiagramm eine normale Variable. Die Methode zeichneSaeulenDiagramm erhält das einen Verweis auf die Daten, auf die saeulenWerte verweist. Würde die Methode zum Beispiel saeulenHoehen[x] = 0; setzen, würde das den Array der aufrufenden Methode ändern. Das gilt für alle Parameter von komplexen Datentypen (Arrays, Objekte,...).

public myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; // … saeulenWerte mit Benutzerwerten initialisieren … zeichneSaeulenDiagramm(saeulenWerte); // saeulenWerte[0] hat jetzt Wert 7, nicht mehr 0! } void zeichneSaeulenDiagramm(int[] saeulenHoehen) { saeulenHoehen[0] = 7; } Die Bezeichnung des Arrays (es gibt in diesem Programm nur einen Array!) spielt dabei überhaupt keine Rolle: Im Hauptprogramm wird der Array saeulenWerte definiert. Er wird als Parameter mit dem Namen saeulenHoehen an die Methoden zeichneSaeulenDiagramm übergeben. saeulenHoehnen «verweist» aber auf den gleichen Array, auch wenn es ein anderer Name ist als saeulenWerte!

Vom Umgang mit Daten

public void myProgram() { boolean[][] neueFelder = new boolean[world.getSizeX()][world.getSizeY()]; berechneNeueFelder(neueFelder); schreibeNeueFelder(neueFelder); } Das Programm soll eine Welt berechnen – oder: Bildbearbeitung in 2 Schritten: 1. Die neue Welt soll zunächst zwischengespeichert werden (Variable neueFelder, Methode berechneNeueFelder). 2. Anschliessend soll die neue Welt dargestellt werden (Methode schreibeNeueFelder).

Ein schwarz-weiss Bild (wobei in Kara «schwarz» als Feld mit Kleeblatt verstanden wird, «weiss» als leeres Feld) kann zum Beispiel dadurch aufgehellt werden, dass jede zweite Zeile auf weiss gesetzt wird:

void berechneNeueFelder(boolean[][] neueFelder) { for (int y = 0; y < world.getSizeY(); y++) { for (int x = 0; x < world.getSizeX(); x++) { if (y % 2 == 0) { neueFelder[x][y] = world.isLeaf(x, y); } else { neueFelder[x][y] = false; } Die Bedingung «y % 2 == 0» prüft, ob der Rest der Ganzzahldivision von y durch 2 0 ist. Falls ja (d.h. in den Spalten 0, 2, 4, …), dann wird für das neue Bild an Koordinate (x,y) der Wert aus dem Originalbild an der gleichen Koordinate (x,y) verwendet. Falls nein (d.h. in den Spalten 1, 3, 5, …), dann wird für das neue Bild an Koordinate (x,y) kein Kleeblatt gesetzt (unabhängig vom Originalbild).

void schreibeNeueFelder(boolean[][] neueFelder) { for (int y = 0; y < world.getSizeY(); y++) { for (int x = 0; x < world.getSizeX(); x++) { world.setLeaf(x, y, neueFelder[x][y]); } Diese Methode setze setzt Kleeblätter gemäss den Booleschen Werte im zwei- dimensionalen Array neueFelder. Diese Methode kann für alle «Bildbearbeitungsprogramme» in JavaKara verwendet werden. Für dieses Beispiel hätten wir einfach die Original-Welt verändern können. Das Beispiel sollte lediglich das «Schema X» der Bildbearbeitung aufzeigen.

Die Grösse eines Kleeblattbildes soll verdoppelt werden:

Die ersten Felder in Zeitlupe berechnet…

Vorgehensweise für Berechnung des neuen Bildes Vom neuen Bild ausgehend überlegen wir uns für jedes Feld der neuen Welt, wie wir aufgrund vom alten Bild entscheiden, ob ein Kleeblatt gelegt werden soll. Betrachten wir Beispiel-Koordinaten:Allgemein formuliert: Wert von x(neu)=0 => Wert von x(alt)=0 Wert von x(neu)=1 => Wert von x(alt)=0Wert für x(neu) = Wert von x(alt)/2 Wert von x(neu)=2 => Wert von x(alt)=1wobei / eine Ganzzahldivision ist Wert von x(neu)=3 => Wert von x(alt)=1 … Analoge Herleitung für Umrechnung von Wert für y(neu) = Wert von y(alt)/2

void berechneNeueFelder(boolean[][] neueFelder) { for (int y = 0; y < world.getSizeY(); y++) { for (int x = 0; x < world.getSizeX(); x++) { neueFelder[x][y] = world.isLeaf(x / 2, y / 2); } Ob im neuen Bild an Koordinate (x,y) ein Kleeblatt liegt oder nicht, hängt davon ab, ob im alten Bild an Koordinate (x/2, y/2) ein Kleeblatt liegt oder nicht.