Javakurs FSS 2012 Lehrstuhl Stuckenschmidt

Click here to load reader

  • date post

    15-Jan-2016
  • Category

    Documents

  • view

    21
  • download

    0

Embed Size (px)

description

Javakurs FSS 2012 Lehrstuhl Stuckenschmidt. Tag 2 – Arrays, Methoden und Rekursion. Arrays. Arrays sind Folgen gleichartiger Variablen: Mathematisch: x 0 , x 1 , x 2 , ..., x n Java: x[0], x[1], x[2], ..., x[n ] Arrays haben eine feste Länge. Deklarieren / Initialisieren. - PowerPoint PPT Presentation

Transcript of Javakurs FSS 2012 Lehrstuhl Stuckenschmidt

Arrays

Javakurs FSS 2012

Lehrstuhl Stuckenschmidt Tag 2 Arrays, Methodenund RekursionArraysArrays sind Folgen gleichartiger Variablen:Mathematisch: x0, x1, x2, ..., xnJava: x[0], x[1], x[2], ..., x[n]Arrays haben eine feste Lnge

012334121722Deklarieren / InitialisierenDeklarierenBekannt machen (z.B. einer Variable)

InitialisierenZuweisung eines Wertes

int zahl;char buchstabe;zahl = 5;buchstabe = c;Deklarieren eines ArraysDeklarierenBekannt machen (z.B. einer Variable)

zahlen ist eine Folge von ganzen Zahlenwort ist eine Folge von Zeichen

int[] zahlen; char[] wort;Initialisieren eines ArraysInitialisieren mit newAusfhrliche Schreibweise:

Kompakte Schreibweise:

Array besteht aus Default WertenInitialisierung ber die Lnge

int[] zahlen; //Deklarationzahlen = new int[4]; //Default Werteint[] zahlen = new int[4];Initialisieren eines ArraysZuweisen von eigenen Werten

hnlich wie bei primitiven DatentypenJedes Feld muss separat betrachtet werden

zahlen[0]zahlen[1]zahlen[2]zahlen[3]34121722int[] zahlen = new int[4];zahlen[0] = 34;zahlen[1] = 12;zahlen[2] = 17;zahlen[3] = 22;zahlen[0]zahlen[1]zahlen[2]zahlen[3]0000Initialisieren eines ArraysGeht das nicht schneller?Ausfhrliche Schreibweise

Kompakte Schreibweise

Keine Angabe der Lnge!

int[] zahlen; zahlen = new int[]{34, 12, 17, 31};zahlen[0]zahlen[1]zahlen[2]zahlen[3]34121722int[] zahlen =new int[]{34, 12, 17, 31};Initialisieren eines ArraysNicht schnell genug?Kompakte Schreibweise

Vorsicht: Ausfhrliche Schreibweise existiert nicht!

int[] zahlen = {34, 12, 17, 31};zahlen[0]zahlen[1]zahlen[2]zahlen[3]34121722Lnge eines ArraysJeder Array hat eine Variable lengthEntspricht der Lnge des Arraysint und finalAuslesen der Lnge:

Konsolenausgabe:

Das letzte Feld eines Arrays ist length-1!!

int[] zahlen = {34, 12, 17, 31};System.out.println(zahlen.length);4Aufrufen von ElementenZugriff 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]);zahlen[0]zahlen[1]zahlen[2]zahlen[3]341217221217Aufrufen von ElementenZugriff 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]000000Arrays und for-SchleifenPerfekt 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-SchleifenBerechnung 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);85Arrays und for-SchleifenErweiterte for-Schleife

Konsolenausgabe:

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

Entspricht:for(int zahl : zahlen){ //bla} for(int n = 0, zahl; n < zahlen.length; n++){ zahl = zahlen[n]; //bla}Arrays und for-SchleifenTypische 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);4Mehrdimensionale ArraysArrays von ArraysErste Dimension stellen die Zeilen darZweite Dimension stellen die Spalten dar

01211380123412170Verweis 1 Verweis1. Array2. Array3. ArrayMehrdimensionale ArraysNichtrechteckige ArraysJede Zeile kann eine eigene Gre haben!01234Hallo0123Welt0Verweis 1 VerweisDeklarieren und InitialisierenDeklarierenquivalent wie beim eindimensionalen Array

Keine Unterschied zwischen rechteckigen und nichtrechteckigen Arrays

int[][] matrix; char[][] halloWelt;Initialisieren eines ArraysInitialisieren mit newRechteckige 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 ArraysZuweisen von eigenen Wertenhnlich wie bei eindimensionalen ArrayJedes Feld muss separat betrachtet werden

int[][] matrix = new int[2][3];zahlen[0][0] = 11;zahlen[0][1] = 3;zahlen[0][2] = 8;01211380120000Verweis 1 VerweisInitialisieren eines ArraysGeht das nicht schneller?

Mengenklammern trennen Dimensionen

int[] matrix = {{11, 3, 8},{34, 12, 17}};01211380123412170Verweis 1 VerweisHallo Weltchar[][] halloWelt = {{'H', 'a', 'l', 'l', 'o'}, {'W', 'e', 'l', 't'}};

for(char[] wort : halloWelt){ for(char c : wort){ System.out.print(c); }}01234Hallo0123Welt0Verweis 1 VerweisString in ArraytoCharArray()Wandelt einen String in einen Array umString str = Hallo;str.toCharArray();01234HalloArray ExceptionsArray Index Out Of Bounds Exception

Index im Array nicht vorhandenNull 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]);MethodenFunktionen einer Klasse/Objektes

Aber warum Methoden?Zerlegung komplexer Programme in kleine TeileWiederkehrende Programmteile schon verfgbar

public static void halloWelt(){ System.out.println(Hallo Welt!);}Aufbau von MethodenMethoden bestehen aus:Methodenkopf

Methodenrumpf

{ System.out.println(Hallo Welt!);}public static void halloWelt()private static double mwSt(double betrag){ return betrag * 0.19;}Aufbau von MethodenMethodenkopfSichtbarkeitMethodentyp (Rckgabetyp)MethodennameMethodenparameter

public static void halloWelt()Beschreibt den Typ einer MethodeName der MethodeParameter der MethodeAufbau von MethodenMethodenkopfSichtbarkeitMethodentyp (Rckgabetyp)MethodennameMethodenparameter

private static double mwSt(double betrag)Beschreibt den Typ einer MethodeName der MethodeParameter der MethodeAufbau von MethodenMethodenrumpf ffnenden KlammerFolge von Anweisungenreturn (optional bei void) Schlieende Klammer

{ return betrag * 0.19;}{ System.out.println(Hallo Welt!);}ReturnreturnEin Rckgabewert pro MethodeBeendet 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}31MethodentypenvoidVerwendung fr Methoden ohne RckgabewerteBzw fr Methoden die keinen Wert berechnenreturn optional ohne Wertpublic static void halloWelt(){ System.out.println(Hallo Welt!);}32MethodentypenDatentypenVerwendung fr Methoden mit RckgabewerteBentigt returnRckgabewert muss der selbe Datentyp seinint, char, double... aber auch Objekte

public static double mwSt(int betrag){ return betrag * 0.19;}

public static double mwSt(double betrag){ System.out.println(Methode mit fester MwSt!); return betrag * 0.19;}MethodenparameterParametrisierte Funktionbergabe von Werten an eine MethodeMethode kann diese Werte verwendenGenerische Methoden mglich

public static double mwSt(double betrag, double satz){ System.out.println(Methode mit variabler MwSt!); return betrag * satz;}MethodenparameterWertbergabebergabe von Werten an Methode bei AufrufBei 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.9Methode mit variabler MwSt!1.9RekursionZurcklaufenEine Funktion durch sich selbst zu definieren

Problem Binrzahl ist spiegelverkehrt!

static void inBinaer(int dezimal){ while(dezimal > 0){ System.out.print(dezimal % 2); dezimal = dezimal / 2; }}RekursionZurcklaufenEine Funktion durch sich selbst zu definieren

Problem Binrzahl ist spiegelverkehrt!

static void inBinaer(int dezimal){ if(dezimal < 2) System.out.print(dezimal); else{ inBinaer(dezimal / 2); System.out.print(dezimal % 2); }}Rekursionstatic int fakul(int zahl) { if(n == 0) return 1; else return fakul(n-1)* n;}fakul(4) = *4*23**11*4*23**1fakul(0)*4*23*fakul(1)*4*3fakul(2)*4fakul(3)Wie funktioniert Rekursion?38*4*32*4*23*1*4*23**1Rekursionstatic int fakul(int zahl) { if(n == 0) return 1; else return fakul(n-1)* n;}fakul(4) = *4*23**11*46Wie funktioniert Rekursion?2439Wechselseitige RekursionZwei oder mehr FunktionenWechselseitigen Bezug aufeinander

Problem Binrzahl 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 RekursionTerminiert nicht (hnlich wie bei Schleifen)

Fragen?