Javakurs FSS 2012 Lehrstuhl Stuckenschmidt

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Imperative Programmierung
der Universität Oldenburg
Forschungszentrum caesar
Einführung in die Programmierung Zusammenfassung
Zusammenfassung der Vorwoche
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
der Universität Oldenburg
Sequentielle Liste - Array
3 Sprachelemente und Anweisungen JavaHS Merseburg (FH) WS 06/07 Strings (Zeichenketten)
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Konstruktoren.
Objekte und Arbeitsspeicher
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
Diskrete Mathematik I Vorlesung Arrays-
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Programmieren mit JAVA
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Methoden (Motivation) Idee: Identische Programmabschnitte zusammenfassen und mit einem Namen versehen Vorteile: Übersichtlichkeit.
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.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
Einführung in die Programmierung Datensammlung
Einführung in die Programmierung Anweisungen und Datentypen
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Sitzung 3: Klassen, Objekte, Arrays und Kontrollstrukturen
Grundkonzepte Java - Klassendefinition
Java programmieren mit JavaKara
Kontrollstrukturen Verwendung: Steuerung des Ablaufs.
IT2 – WS 2005/20061Oct 10, 2005 Externes Verhalten – Quelltext (source code) Durch Aufrufe der Konstruktoren und Methoden kann das externe Verhalten (=die.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmiersprache C 4
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
2.4 Rekursion Klassifikation und Beispiele
Unterprogramme in JAVA
EPROG Tutorium #3 Philipp Effenberger
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Programmiervorkurs WS 2014/15 Schleifen
Programmiervorkurs WS 2014 Referenzdatentypen
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Diskrete Mathematik I Vorlesung 2 Arrays.
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Java-Kurs Übung Besprechung der Hausaufgabe
Java Programme nur ein bisschen objektorientiert.
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Felder in der Informatik
Schleifen Datenfelder (Arrays) Verzweigungen
 Präsentation transkript:

Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 2 – Arrays, Methoden und Rekursion

Arrays Arrays sind Folgen gleichartiger Variablen: Mathematisch: x0, x1, x2, ..., xn Java: x[0], x[1], x[2], ..., x[n] Arrays haben eine feste Länge 1 2 3 34 12 17 22

Deklarieren / Initialisieren Bekannt machen (z.B. einer Variable) Initialisieren Zuweisung eines Wertes int zahl; char buchstabe; zahl = 5; buchstabe = ‘c‘;

Deklarieren eines Arrays Bekannt machen (z.B. einer Variable) zahlen ist eine Folge von ganzen Zahlen wort ist eine Folge von Zeichen int[] zahlen; char[] wort;

Initialisieren eines Arrays Initialisieren mit new Ausführliche Schreibweise: Kompakte Schreibweise: Array besteht aus Default Werten Initialisierung über die Länge int[] zahlen; //Deklaration zahlen = new int[4]; //Default Werte int[] zahlen = new int[4];

Initialisieren eines Arrays Zuweisen von eigenen Werten Ähnlich wie bei primitiven Datentypen Jedes Feld muss separat betrachtet werden zahlen[0] zahlen[1] zahlen[2] zahlen[3] int[] zahlen = new int[4]; zahlen[0] = 34; zahlen[1] = 12; zahlen[2] = 17; zahlen[3] = 22; zahlen[0] zahlen[1] zahlen[2] zahlen[3] 34 12 17 22

Initialisieren eines Arrays Geht das nicht schneller? Ausführliche Schreibweise Kompakte Schreibweise Keine Angabe der Länge! int[] zahlen; zahlen = new int[]{34, 12, 17, 31}; int[] zahlen =new int[]{34, 12, 17, 31}; zahlen[0] zahlen[1] zahlen[2] zahlen[3] 34 12 17 22

Initialisieren eines Arrays Nicht schnell genug? Kompakte Schreibweise Vorsicht: Ausführliche Schreibweise existiert nicht! int[] zahlen = {34, 12, 17, 31}; zahlen[0] zahlen[1] zahlen[2] zahlen[3] 34 12 17 22

Länge eines Arrays Jeder Array hat eine Variable length Entspricht der Länge des Arrays int und final Auslesen der Länge: Konsolenausgabe: Das letzte Feld eines Arrays ist length-1!! int[] zahlen = {34, 12, 17, 31}; System.out.println(zahlen.length); 4

Aufrufen von Elementen Zugriff auf die Elemente über den Index Konsolenausgabe: int[] zahlen = {34, 12, 17, 22}; System.out.println(zahlen[1]); System.out.println(zahlen[2]); System.out.println(zahlen[4]); 12 17 zahlen[0] zahlen[1] zahlen[2] zahlen[3] 34 12 17 22

Aufrufen von Elementen Zugriff auf die Elemente über den Index Konsolenausgabe: int[] zahlen = new int[4]; System.out.println(zahlen[1]); System.out.println(zahlen[2]); System.out.println(zahlen[4]); zahlen[0] zahlen[1] zahlen[2] zahlen[3]

Arrays und for-Schleifen Perfekt zum Durchlaufen von Arrays Konsolenausgabe: char[] alphabet = {‘a‘, ‘b‘, ‘c‘, ..., ‘y‘, ‘z‘}; for(int n = 0; n < alphabet.length; n++){ System.out.print(char[n] + “ “); } a b c d e f g h i j k ...

Arrays und for-Schleifen Berechnung der Summe Konsolenausgabe: int[] zahlen = {34, 12, 17, 22}; int sum = 0; for(int n = 0; n < zahlen.length; n++){ sum += zahlen[n]; } System.out.println(sum); 85

Arrays und for-Schleifen Erweiterte for-Schleife Konsolenausgabe: int[] zahlen = {34, 12, 17, 22}; int sum = 0; for(int zahl : zahlen){ sum += zahl; } System.out.println(sum); 85

Arrays und for-Schleifen Erweiterte for-Schleife Kurze Schreibweise Entspricht: for(int zahl : zahlen){ //bla } for(int n = 0, zahl; n < zahlen.length; n++){ zahl = zahlen[n]; //bla }

Arrays und for-Schleifen Typische Suche in einem Array Konsolenausgabe: int position = 0; for(int n = 0; n < alphabet.length; n++){ if(alphabet[n] == ‘d‘){ position = n + 1; break; } System.out.println(position); 4

Mehrdimensionale Arrays Arrays von Arrays Erste Dimension stellen die Zeilen dar Zweite Dimension stellen die Spalten dar 2. Array 1. Array 1 2 11 3 8 Verweis 1 1 2 34 12 17 3. Array

Mehrdimensionale Arrays Nichtrechteckige Arrays Jede Zeile kann eine eigene Größe haben! 1 2 3 4 H a l o Verweis 1 1 2 3 W e l t

Deklarieren und Initialisieren Äquivalent wie beim eindimensionalen Array Keine Unterschied zwischen rechteckigen und nichtrechteckigen Arrays int[][] matrix; char[][] halloWelt;

Initialisieren eines Arrays Initialisieren mit new Rechteckige Arrays: Nichtrechteckige Arrays int[][] matrix = new int[2][3] char[][] halloWelt = new char[2][]; halloWelt[0] = new char[5]; halloWelt[1] = new char[6]

Initialisieren eines Arrays Zuweisen von eigenen Werten Ähnlich wie bei eindimensionalen Array Jedes Feld muss separat betrachtet werden int[][] matrix = new int[2][3]; zahlen[0][0] = 11; zahlen[0][1] = 3; zahlen[0][2] = 8; 1 2 11 3 8 Verweis 1 1 2

Initialisieren eines Arrays Geht das nicht schneller? Mengenklammern trennen Dimensionen int[] matrix = {{11, 3, 8},{34, 12, 17}}; 1 2 11 3 8 Verweis 1 1 2 34 12 17

Hallo Welt char[][] halloWelt = {{'H', 'a', 'l', 'l', 'o'}, for(char[] wort : halloWelt){ for(char c : wort){ System.out.print(c); } 1 2 3 4 H a l o Verweis 1 1 2 3 W e l t

String in Array toCharArray() Wandelt einen String in einen Array um String str = “Hallo“; str.toCharArray(); 1 2 3 4 H a l o

Array Exceptions Array Index Out Of Bounds Exception Index im Array nicht vorhanden Null Pointer Exception 2te Dimension noch nicht initialisiert int[] zahlen = {12, 32, 24, 17}; System.out.println(zahlen[4]); char[][] halloWelt = new char[2][]; System.out.println(halloWelt[0][0]);

Methoden Funktionen einer Klasse/Objektes Aber warum Methoden? Zerlegung komplexer Programme in kleine Teile Wiederkehrende „Programmteile“ schon verfügbar public static void halloWelt(){ System.out.println(“Hallo Welt!“); }

Aufbau von Methoden Methoden bestehen aus: Methodenkopf Methodenrumpf public static void halloWelt() private static double mwSt(double betrag) { System.out.println(“Hallo Welt!“); } { return betrag * 0.19; }

Aufbau von Methoden Methodenkopf Sichtbarkeit Methodentyp (Rückgabetyp) Methodenname Methodenparameter public static void halloWelt() Beschreibt den Typ einer Methode Name der Methode Parameter der Methode

Aufbau von Methoden Methodenkopf Sichtbarkeit Methodentyp (Rückgabetyp) Methodenname Methodenparameter private static double mwSt(double betrag) Beschreibt den Typ einer Methode Name der Methode Parameter der Methode

Aufbau von Methoden Methodenrumpf Öffnenden Klammer Folge von Anweisungen return (optional bei void) Schließende Klammer { System.out.println(“Hallo Welt!“); } { return betrag * 0.19; }

Return return Ein Rückgabewert pro Methode Beendet Methode (vorzeitig) static void sqrt(double d){ if ( d < 0){ return; } System.out.println(Math.sqrt(d)); static int soNicht(){ int i = 0; return i; i = 2; //Unreachable Code }

Methodentypen void Verwendung für Methoden ohne Rückgabewerte Bzw für Methoden die keinen Wert berechnen return optional ohne Wert public static void halloWelt() { System.out.println(“Hallo Welt!“); }

Methodentypen Datentypen Verwendung für Methoden mit Rückgabewerte Benötigt return Rückgabewert muss der selbe Datentyp sein int, char, double... aber auch Objekte public static double mwSt(int betrag) { return betrag * 0.19; }

Methodenparameter Parametrisierte Funktion Übergabe von Werten an eine Methode Methode kann diese Werte verwenden Generische Methoden möglich public static double mwSt(double betrag, double satz) { System.out.println(“Methode mit variabler MwSt!“); return betrag * satz; } public static double mwSt(double betrag) { System.out.println(“Methode mit fester MwSt!“); return betrag * 0.19; }

Methodenparameter Wertübergabe Übergabe von Werten an Methode bei Aufruf Bei gleichem Methodennamen wird mit Parameter zwischen den einzelnen Methoden differenziert Konsolenausgabe: public static void main(String[] args){ System.out.println(mwSt(10)); System.out.println(mwSt(10,0.19)); } Methode mit fester MwSt! 1.9 Methode mit variabler MwSt!

Rekursion „Zurücklaufen“ Eine Funktion durch sich selbst zu definieren Problem Binärzahl ist spiegelverkehrt! static void inBinaer(int dezimal){ while(dezimal > 0){ System.out.print(dezimal % 2); dezimal = dezimal / 2; }

Rekursion „Zurücklaufen“ Eine Funktion durch sich selbst zu definieren Problem Binärzahl ist spiegelverkehrt! static void inBinaer(int dezimal){ if(dezimal < 2) System.out.print(dezimal); else{ inBinaer(dezimal / 2); System.out.print(dezimal % 2); }

Wie funktioniert Rekursion? static int fakul(int zahl) { if(n == 0) return 1; else return fakul(n-1)* n; } Rekursion fakul(4) = * 4 2 3 1 fakul(0) * 4 2 3 1 * 4 2 3 fakul(1) * 4 3 fakul(2) * 4 fakul(3)

Wie funktioniert Rekursion? static int fakul(int zahl) { if(n == 0) return 1; else return fakul(n-1)* n; } Rekursion fakul(4) = * 4 2 3 1 * 4 2 3 1 * 4 2 3 1 * 4 3 2 * 4 6 24

Wechselseitige Rekursion Zwei oder mehr Funktionen Wechselseitigen Bezug aufeinander Problem Binärzahl ist spiegelverkehrt! static boolean istUngerade(int zahl) { if(zahl == 0) { return false; } return istGerade(zahl-1); static boolean istGerade(int zahl) { if(zahl == 0){ return true; return istUngerade(zahl-1);

Endlose Rekursion Terminiert nicht (Ähnlich wie bei Schleifen)

Fragen?