• Keine Ergebnisse gefunden

Ubungen zu Einf¨ ¨ uhrung in die Informatik:

N/A
N/A
Protected

Academic year: 2021

Aktie "Ubungen zu Einf¨ ¨ uhrung in die Informatik:"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Ludwig-Maximilians-Universit¨at M¨unchen WS 2014/15

Institut f¨ur Informatik Ubungsblatt 12¨

Prof. Dr. R. Hennicker, A. Klarl

Ubungen zu Einf¨ ¨ uhrung in die Informatik:

Programmierung und Software-Entwicklung

Aufgabe 12-1 Ausnahmen und Ausnahmebehandlung Pr¨asenz Gegeben sei eine Methode zum Umwandeln von Strings in Zeichenketten, die nur aus Großbuch- staben bestehen. Die Methode printUpperCase(String s) wandelt jeweils einen einzelnen String in Großbuchstaben um und gibt den umgewandelten String zur¨uck.

1 p u b l i c S t r i n g p r i n t U p p e r C a s e ( S t r i n g s ) throws E x c e p t i o n 1 , E x c e p t i o n 2 {

2 i f ( s == n u l l)

3 throw new E x c e p t i o n 1 ();

4 i f ( s . l e n g t h () == 0)

5 throw new E x c e p t i o n 2 ();

6

7 return s . t o U p p e r C a s e ();

8 }

Die Methode printUpperCase verwendet die folgenden KlassenException1 undException2:

1 p u b l i c c l a s s E x c e p t i o n 1 extends E x c e p t i o n {

2 }

3

4 p u b l i c c l a s s E x c e p t i o n 2 extends E x c e p t i o n {

5 }

In dieser Aufgabe sollen Sie ein Programm mit einer grafischen Benutzeroberfl¨ache implementie- ren, welches die Umwandlung eines Arrays von Strings testet. Die Anzahl der umzuwandelnden Strings num soll vom Benutzer frei w¨ahlbar sein und wie gewohnt durch einen modalen Dialog zu Beginn der Anwendung abgefragt werden.

a) Die grafische Benutzeroberfl¨ache soll wie folgt aussehen:

Es soll einen Button mit der oben angegebenen Aufschrift geben. Darunter soll der Ausgabe- bereich f¨ur die umgewandelten Strings bzw. f¨ur Meldungen ¨uber den Erfolg der Umwandlung platziert werden.

Da die Ausgabe l¨anger sein kann, k¨onnen Sie mit Hilfe der Klassen ScrollPane und ScrollPaneConstants der Swing-Bibliothek dem Ausgabebereich auf folgende Weise ei- ne vertikale Scrollbar hinzuf¨ugen:

1

(2)

1 J S c r o l l P a n e s c r o l l P a n e = new J S c r o l l P a n e ( a u s g a b e B e r e i c h );

2 s c r o l l P a n e . s e t H o r i z o n t a l S c r o l l B a r P o l i c y (

3 S c r o l l P a n e C o n s t a n t s . H O R I Z O N T A L _ S C R O L L B A R _ N E V E R );

Schreiben Sie eine Klasse UpperCaseFrame, die die Hauptklasse dieser grafischen Benut- zeroberfl¨ache sein soll und das Fenster erzeugt. Um Ihr Programm ausf¨uhren zu k¨onnen, schreiben Sie eine weitere Klasse UpperCaseFrameMain, die Sie wie gewohnt im gleichen Ordner wie Ihre Klasse UpperCaseFrameabspeichern.

b) Erg¨anzen Sie Ihre Klasse UpperCaseFrame um eine Ereignisbehandlung f¨ur den But- ton. Wird dieser Button gedr¨uckt, soll der Benutzer zun¨achst in einer Methode umwandelnStrings mit Hilfe der Klasse JOptionPane nach der Anzahl num der um- zuwandelnden Strings gefragt werden. Diese Methode soll sich auch darum k¨ummern, dass im Ausgabebereich Inhalte vorhergehender Eingaben gel¨oscht werden. Ein Test-Array testArray mit umzuwandelnden Strings soll in der Klasse als Konstante angelegt werden und den Wert{null, "", "test"}haben. Die Strings des Test-Arrays sollen durch Aufruf der Methode printUpperCaseArray umgewandelt werden. Diese Methode verwendet die vorhergenannte MethodeprintUpperCaseund greift auf das AttributausgabeBereichf¨ur den Ausgabebereich in der grafischen Benutzeroberfl¨ache zur¨uck.

1 p u b l i c void p r i n t U p p e r C a s e F o r A r r a y ( S t r i n g [] array , i n t num ) {

2 f o r (i n t i = 0; i < num ; i ++) {

3 t h i s. a u s g a b e B e r e i c h . a p p e n d (t h i s. p r i n t U p p e r C a s e ( a r r a y [ i ]) + " \ n " );

4 }

5 t h i s. a u s g a b e B e r e i c h . a p p e n d ( " F e r t i g !\ n " );

6 }

F¨ugen Sie die Methoden in Ihre Implementierung der KlasseUpperCaseFrameein und rufen Sie sie an geeigneter Stelle auf. Warum kommt es bei der gegenw¨artigen Formulierung der Methode zu einem Kompilierfehler? F¨ugen Sie in die Methode printUpperCaseForArray eine Ausnahmebehandlung ein, so dass das Programm fehlerfrei kompiliert wird und bei Ausf¨uhrung mit Eingabe 3 folgender Text auf der Konsole erscheint:

Exception bei Versuch 1 Exception bei Versuch 2 TEST

Fertig!

c) Andern Sie jetzt den¨ catch-Block in der MethodeprintUpperCaseForArrayund f¨ugen Sie gegebenenfalls weiterecatch-Bl¨ocke ein, so dass bei Ausf¨uhrung des Programms folgender Text ausgegeben wird:

text[1] war null!

text[2] war leer!

TEST Fertig!

d) Rufen Sie jetzt testweise das Programm mit dem Wert 4 f¨ur den Parameternumauf. Wenn das Programm jetzt ausgef¨uhrt wird, dann bricht es mit einer

”ungefangenen“ Exception ab. F¨ugen Sie weiteretry-,catch- oderfinally-Bl¨ocke ein, so dass dies nicht mehr passiert und stattdessen folgende Ausgabe erscheint:

text[1] war null!

Nach Versuch 1 text[2] war leer!

Nach Versuch 2

2

(3)

TEST

Nach Versuch 3

Fehler! Falscher Arrayzugriff!

Nach Versuch 4 Fertig!

Vermeiden Sie dabei m¨oglichst Wiederholungen. Insbesondere soll nicht die Anweisung appendmehrmals mit den gleichen ¨ubergebenen Parametern verwendet werden. Testen Sie Ihr Programm anschließend nochmals mit dem Wert 4 f¨ur den Parameter num.

e) Wie k¨onnte man dieRuntimeExceptionaus Teil d, durch bessere Programmierung vermei- den?

Aufgabe 12-2 Ausnahmen und Ausnahmebehandlung Hausaufgabe Der Modulo-Operator % kann in Java dazu verwendet werden, den Rest einer ganzzahligen Division zu berechnen. Es gilt also z.B.4 % 2 == 0und 5 % 2 == 1.

In dieser Aufgabe sollen Sie ein Programm mit einer grafischen Benutzeroberfl¨ache implemen- tieren, welches die Summe aller geraden Zahlen (Zahlen, die ohne Rest durch 2 teilbar sind) in einem int-Array ermittelt. Das int-Array soll durch einen modalen Dialog zu Beginn der Anwendung abgefragt und vom Benutzer eingegeben werden.

a) Die grafische Benutzeroberfl¨ache soll wie folgt aussehen:

Es soll einen Button mit der oben angegebenen Aufschrift geben. Darunter soll der Ausga- bebereich f¨ur die berechnete Summe der geraden Zahlen platziert werden.

Schreiben Sie eine KlasseModuloFrame, die die Hauptklasse dieser grafischen Benutzerober- fl¨ache sein soll und das Fenster erzeugt. Um Ihr Programm ausf¨uhren zu k¨onnen, schreiben Sie eine weitere KlasseModuloFrameMain, die Sie wie gewohnt im gleichen Ordner wie Ihre KlasseModuloFrameabspeichern.

b) Deklarieren Sie nun eine MethodesummeGeraderZahleninnerhalb der KlasseModuloFrame, welche die Summe aller geraden Zahlen in einem int-Array ermittelt. Das Array soll da- bei als Parameter der Methode ¨ubergeben werden und die berechnete Summe soll den R¨uckgabewert der Methode bilden. Falls in der Reihung eine negative Zahl vorkommt, soll eine benutzerdefinierte und gecheckte Ausnahme NegativeElementException aus- gel¨ost und die Ausf¨uhrung der Methode summeGeraderZahlen dabei abgebrochen werden.

Ber¨ucksichtigen Sie dies auch bei der Deklaration des Methodenkopfs dieser Methode. Um eine AusnahmeNegativeElementException verwenden zu k¨onnen, m¨ussen Sie zudem erst eine KlasseNegativeElementExceptiondeklarieren, die eineChecked Exception realisiert.

Eine Fehlernachricht muss nicht in das Fehlerobjekt integriert werden.

c) Erg¨anzen Sie die Klasse ModuloFrame nun um eine Ereignisbehandlung f¨ur den Button.

Wird dieser Button gedr¨uckt, soll der Benutzer zun¨achst in einer MethodesummeBerechnen 3

(4)

mit Hilfe der KlasseJOptionPanenach demint-Array gefragt werden, das als Eingabe f¨ur die Berechnung dient. Die MethodesummeBerechnenmuss sich daher ebenfalls um die Kon- vertierung des eingelesenen Strings in einint-Array k¨ummern. Auf der Vorlesungswebseite finden Sie die KlasseKonverter.java, mit der Sie in der MethodekonvertiereZuIntArray einen Komma-separierten String in ein int-Array konvertieren k¨onnen (d.h. die Einga- be 1,2,3 wird konvertiert in ein Array [1,2,3]). Aus dem durch die Konvertierung er- haltenen int-Array soll mithilfe der statischen Methode summeGeraderZahlen aus Tei- laufgabe b) die Summe der geraden Zahlen berechnet und diese anschließend im Ausga- bebereich des ModuloFrames ausgegeben werden. F¨ugen Sie try-, und catch- Bl¨ocke in die Methode summeBerechnen ein, so dass, falls die Methode summeGeraderZahlen eine NegativeElementExceptionausl¨ost, die Meldung

”Fehler!“ ausgegeben wird.

Aufgabe 12-3 Klausurvorbereitung 6 und 9 ECTS Hausaufgabe Uberlegen und formulieren Sie Fragen zu Themen aus der Vorlesung, bei denen Sie noch Proble-¨ me haben. Die am meisten gestellten Fragen werden in den Tutorien 21.01.2015 bis 28.01.2015 behandelt. Bitte geben Sie auch diese Hausaufgabe per UniWorX ab!

Besprechung der Pr¨asenzaufgaben in den ¨Ubungen vom 07.01.2015 bis zum 14.01.2015. Abgabe der Hausaufgaben bis Mittwoch, 21.01.2015, 14:00 Uhr ¨uber UniworX (siehe Folien der ersten Zentral¨ubung). Erstellen Sie zu jeder Aufgabe Klassen, die die Namen tragen, die in der Aufgabe gefordert sind. Geben Sie nur die entsprechenden .java-Dateien ab. Wir ben¨otigen nicht Ihre .class-Dateien.

4

Referenzen

ÄHNLICHE DOKUMENTE

Der Empf ¨anger der toUpperCase -Nachricht ist das String -Objekt, welches durch &#34;ibm&#34; referenziert wird.. eine Instanz von der die

BufferedReader -Objekte schließlich modellieren die Eingabe als eine Folge von Zeilen, die einzeln durch String -Objekte repr ¨asentiert werden k

• Java stellt mit float und double zwei elementare Datentypen mit unterschiedlicher Genauigkeit f ¨ur die Repr ¨asentation von.. Fließkommazahlen zur

• Der &amp;&amp; -Operator f ¨ur das logische Und kann auch durch eine geschachtelte if -Anweisung realisiert werden.

• Da wir mit count die Anzahl der durchgef ¨uhrten Multiplikationen z ¨ahlen, m ¨ussen wir die Schleife solange wiederholen, bis count den gleichen Wert wie y hat.. private

• Die in einem Vector -Objekt abgelegten Objekte sind entsprechend ihrer Einf ¨ugung angeordnet: Das erste Objekt befindet sich an Position 0.. Die weiteren folgen an den Positionen

• Terminierung: Bei jedem Aufruf einer rekursiven Methode muss gepr ¨uft werden, ob Aufgabe ohne erneute Rekursion gel ¨ost werden kann1. – Der Terminierungs-Code muss vor

• Wir haben gesehen, dass eine abgeleitete Klasse eine Methode ihrer Superklasse uberschreiben ¨ kann.. •