10 Wiederholung der Grundelemente in Java 1. Schleifen Objektorientierte Programmierung OOP Objektorientierte Programmierung (OOP) mit Java 2. Plattformunabhängigkeit 3. BankKonto 4. KontoKorrent 10 Wiederholung der Grundelemente in Java 5. KontenArray Übungen © Prof. Dr. Rolf Dornberger 10 Wiederholung der Grundelemente in Java OOP: 10 Wiederholung der Grundelemente in Java 22.09.2010 2 Aufgabe 1: Schleifen Wiederholung: – Objektorientierte Programmierung; Rolf Dornberger; http://www.hsw.fhso.ch/dornberger/Documents/Lectures/oop.html; Fachhochschule Solothurn Nordwestschweiz; 2004-2006. • In Java können for-Schleifen auch mehrere Zählvariablen beinhalten. Die Variablen werden dann alle zuerst definiert und initialisiert, danach wird deren Zulässigkeit für einen weiteren Schleifendurchlauf getestet und dann erfolgt ein Update der Variablenwerte. Betrachten Sie nun nachfolgendes Programm. public class For1x { public static void main (String[] args) { for (int i=1, j=4; (i<=4) || (j>=-4); i++, j-=2) { System.out.println(i + " / " + j); } } Kapitel: – 1 Übersicht und Einleitung – 2 JDK/SDK/JRE und Java Entwicklungswerkzeuge } – 3 Hauptbestandteile von Java: Token, Kommentare, Datentypen, Operatoren – 4 Hauptbestandteile von Java: Datenfelder, Parameterübergabe, Casting – 5 Elementare Anweisungen und Bedingungen – 6 Schleifen – 7 Methoden, Algorithmen und Rekursion in Java – 8 Klassen, Objekte, Methoden, Vererbung, Konstruktoren © Prof. Dr. Rolf Dornberger OOP: 10 Wiederholung der Grundelemente in Java 22.09.2010 3 1. Was gibt das Programm aus? 2. Wie müssen Sie die for-Schleife ändern, damit die Ausgabereihenfolge umgekehrt ist, also die letzte Zeile zuerst und die erste Zeile zuletzt © Prof. Dr. Rolf Dornberger OOP: 10 Wiederholung der Grundelemente in Java 22.09.2010 ausgegeben werden? 3. Was passiert, wenn Sie folgende Zeile anstelle der ursprünglichen for- 4 Lösung 1: Schleifen 1. Aufgabe 2: Plattformunabhängigkeit Wie ist die Plattformunabhängigkeit in Java realisiert? public class For2x { public static void main (String[] args) { for (int i=5, j=-4; (i>=1) || (j<=4); i--, j+=2) { System.out.println(i + " / " + j); } } } 2. 3. Erklären Sie kurz. Ordnen Sie dabei die Begriffe Source-, Byte- und Maschinencode ein. Der Compiler gibt einen Fehler aus, da die Variable j nicht definiert ist, in der Zeile System.out.println(i + " / " + j); aber benötigt wird. 4. public class For3x { public static void main (String[] args) { for (int i=3; i<=15; i+=4) { System.out.println(i); } } } © Prof. Dr. Rolf Dornberger OOP: 10 Wiederholung der Grundelemente in Java 22.09.2010 5 © Prof. Dr. Rolf Dornberger • Die Plattformunabhängigkeit in Java ist dadurch realisiert, dass der JavaCompiler den Java-Sourcecode nur in einen so genannten Byte-Code kompiliert (maschinenneutral). Dieser Byte-Code ist noch auf keiner Maschine lauffähig d.h. dass der Byte-Code durch eine JVM (für jeden Maschinentyp verschieden) in maschinenspezifischen Code zur Laufzeit umgewandelt wird. Editor Java Compiler 22.09.2010 6 Aufgabe 3: BankKonto Lösung 2: Plattformunabhängigkeit Java Sourcecode (.java) OOP: 10 Wiederholung der Grundelemente in Java Java Bytecode (.class) Erstellen Sie die Klasse BankKonto mit den Attributen betrag und inhaber und der Methode getInfo. Die Methode schreibt den Namen und den Kontostand auf den Bildschirm. a) Zeichnen Sie dazu zuerst ein Klassendiagramm. b) Programmieren Sie danach die Klasse (BankKonto.java). Zusätzlich soll diese Klasse die main-Methode enthalten. c) Zeichnen Sie die Objektdiagramme für das Objekt KontoMeier mit dem Namen „Meier“, der 25‘000.-- besitzt, und für das Objekt KontoMoser mit dem Namen „Moser“, der 10‘000.-besitzt. JVM d) Schreiben Sie in die main-Methode der Klasse BankKonto die Code-Zeilen, mit denen diese Objekte aus der Klasse BankKonto gebildet und ihnen die entsprechenden Attributwerte zugewiesen werden. e) Führen Sie für jedes der beiden Objekte (KontoMoser und KontoMeier) die Methode getInfo() in der main-Methode aus. © Prof. Dr. Rolf Dornberger OOP: 10 Wiederholung der Grundelemente in Java 22.09.2010 7 © Prof. Dr. Rolf Dornberger OOP: 10 Wiederholung der Grundelemente in Java 22.09.2010 8 Lösung 3: BankKonto Aufgabe 4: KontoKorrent a) und c) Klassendiagramm und Objektdiagramme: BankKonto b), d) und e) KontoMeier:BankKonto KontoMoser:BankKonto betrag inhaber betrag = 25000 inhaber = Meier betrag = 10000 inhaber = Moser getInfo() getInfo() getInfo() • Erstellen Sie eine neue Klasse KontoKorrent, welche von BankKonto erbt. • Die neue Klasse hat einen Konstruktor, mit dem direkt der Name des Inhabers sowie der Kontostand gesetzt werden können. • Fügen Sie der Klasse noch die Methode einzahlen zu. Mit dieser Methode soll ein Betrag b übergeben werden können, welcher auf den bestehenden Betrag addiert wird. public class BankKonto{ int betrag; String inhaber; public void getInfo(){ System.out.println("Inhaber: " + inhaber); System.out.println("Betrag: " + betrag); } • Fügen Sie der Klasse die Methode auszahlen zu. Diese Methode subtrahiert den übergebenen Betrag b vom Kontobetrag. public static void main(String[] args){ BankKonto KontoMeier = new BankKonto(); KontoMeier.betrag = 25000; KontoMeier.inhaber = "Meier"; BankKonto KontoMoser = new BankKonto(); KontoMoser.betrag = 10000; KontoMoser.inhaber = "Moser"; KontoMeier.getInfo(); KontoMoser.getInfo(); } • Ändern Sie die Methode auszahlen so ab, dass nicht ausbezahlt werden kann, wenn der Betrag danach unter 0 wäre. • Erstellen Sie in der main-Methode zwei KontoKorrent-Objekte und testen Sie den Konstruktor und die Methoden auszahlen und einzahlen. } © Prof. Dr. Rolf Dornberger OOP: 10 Wiederholung der Grundelemente in Java 22.09.2010 9 © Prof. Dr. Rolf Dornberger OOP: 10 Wiederholung der Grundelemente in Java 22.09.2010 10 22.09.2010 12 Lösung 4: KontoKorrent public class KontoKorrent extends BankKonto{ Aufgabe 5: KontenArray public KontoKorrent(String inhaber, int betrag){ this.betrag = betrag; this.inhaber = inhaber; } • Erstellen Sie eine neue Klasse KontenArray. • Die Klasse hat wieder die Attribute betrag und inhaber, diesmal sind sie aber private. public void einzahlen(int betrein){ betrag = betrag + betrein; } • Fügen Sie für die Attribute die get- und set-Methoden hinzu. public void auszahlen(int betraus){ if(betraus>betrag){ System.out.println("Es kann nicht ausbezahlt werden!"); } else{ betrag = betrag - betraus; } } • Erstellen Sie in der main-Methode einen Konto-Array mit 5 Positionen. • Erstellen Sie in der main-Methode einen String-Array mit 5 Namen, dem Sie 5 willkürlich gewählte Namen zuweisen. public static void main(String[] args){ KontoKorrent k1 = new KontoKorrent("Doller", 15); k1.einzahlen(20); k1.getInfo(); • In einer for-Schleife sollen nun alle Konten mit inhaber und betrag im KontenArray erstellt werden. Weisen Sie dabei betrag einen Zufallswert zwischen 0 und 1000 zu. KontoKorrent k2 = new KontoKorrent("Maurer", 20); k2.auszahlen(40); k2.getInfo(); } • In einer weiteren Schleife sollen nun alle Konten mit den Attributen ausgegeben werden. Geben Sie auch den Array-Index als Kontonummer aus. } © Prof. Dr. Rolf Dornberger OOP: 10 Wiederholung der Grundelemente in Java 22.09.2010 11 © Prof. Dr. Rolf Dornberger OOP: 10 Wiederholung der Grundelemente in Java Lösung 5: KontenArray public class KontenArray{ private int betrag; private String inhaber; public void setBetrag(int b){ betrag = b; } public int getBetrag(){ return betrag; } public void setInhaber(String i){ inhaber = i; } public String getInhaber(){ return inhaber; } public static void main(String[] args){ KontenArray[] kArray = new KontenArray[5]; String[] namen = new String[]{"Meier","Müller","Moser","Baumann","Bergmann"}; for(int i = 0;i<kArray.length;i++){ kArray[i] = new KontenArray(); kArray[i].setBetrag((int)(Math.random()*1000)); kArray[i].setInhaber(namen[i]); } for(int i = 0;i<kArray.length;i++){ System.out.println("KontoNr. " + i); System.out.println("Inhaber " + kArray[i].getInhaber()); System.out.println("Betrag " + kArray[i].getBetrag()); System.out.println(); } } } © Prof. Dr. Rolf Dornberger OOP: 10 Wiederholung der Grundelemente in Java 22.09.2010 13