Übungen zu ‘‘Java 2’’ Sommersemester 99, Bernd Kühl, [email protected] Blatt 3 vom: letzter Abgabetermin: 3. Mai 99 10. Mai 99, 10:00 Uhr Aufgabe 1 (1 Punkt) a) Was bedeutet das Wort final bei Variablen, Methoden und Klassen? (Hinweis: Es gibt Java-Bücher.) b) Wo ist der Unterschied zwischen der Identität und Äquivalenz/Gleichheit von Objekten? Wie prüfen Sie beides in Java ab? Was macht die Methode public boolean equals(Object obj) der Klasse Object, was die der Klasse String? c) Erklären Sie den Unterschied der Operatoren & und && bzw. von | und || bei Verkettung von boolschen Ausdrücken. Aufgabe 2 (1 Punkt) Machen Sie sich mit /home/java/Uebungen/Blatt3/Src/InputFile.java vertraut: import java.io.*; class InputFile { FileInputStream fis; InputFile(String filename) { fis = new FileInputStream(filename); } String getLine() { int c; StringBuffer buf = new StringBuffer(); do { c = fis.read(); if (c == ´\n’) // UNIX new line return buf.toString(); buf.append((char)c); } while (c != -1); return null; } } Wieso kann die Klasse nicht korrekt übersetzt werden? Beseitigen Sie das/die Problem/e. Aufgabe 3 (3 Punkte) Machen Sie sich mit der internen Darstellung von float- und double-Werten vertraut. Ein Tip: Lesen Sie Kapitel 20 der Java Language Specification. Erklären Sie Ihrem Tutor die interne Darstellung für -1.0, -Infinity, NaN, 0 und für die kleinste darstellbare Zahl. -2- Implementieren Sie ein Java-Programm, mit dem Sie die interne Darstellung testen können. $ java CvtFloat usage: CvtFloat float-number CvtFloat [-] exponent mantisse values are decimal or hexadecimal Wird das Kommando mit einem Argument aufgerufen, so muß es eine float-Konstante sein, deren Mantisse und Exponent ausgegeben werden. $ java CvtFloat 100. float 100.0 Bits: 0 10000101 10010000000000000000000 effektive Bits: 0 10000101 110010000000000000000000 sign=0(0x0) exp.=133(0x85) man.=4718592(0x480000) eff. mant.=13107200(0xc80000) Zwei Argumente repräsentieren Zahlenwerte für die Bits des Exponenten und der Mantisse. Ein optionales ``-´´ signalisiert eine negative Zahl. Jetzt muß der zusammengesetzte Gleitkommawert ausgegeben werden. $ java CvtFloat 150 2 Bits: 0 10010110 00000000000000000000010 effektive Bits: 0 10010110 100000000000000000000010 float 8388610.0 $ java CvtFloat 0 0x400000 Bits: 0 00000000 10000000000000000000000 effektive Bits: 0 00000000 100000000000000000000000 float 5.877472E-39 $ java CvtFloat - 0 334 Bits: 1 00000000 00000000000000101001110 effektive Bits: 1 00000000 000000000000001010011100 float -4.68E-43 Beachten Sie mögliche Fehleingaben, die zu Exceptions führen könnten. -3- Aufgabe 4 (2 Punkte) Was macht folgendes Programm (/home/java/Uebungen/Blatt3/Src/Test.java): public class Test { public static void main(String args[]) { System.out.\u0070\u0072\u0069\u006e\u0074\u006c\u006e( "\u005c\u0022Hello world!\u005c\u0022"); } } Warum erhält man in der Ausgabe andere Resultate, wenn man anstelle von \u005c\u0022 nun \\u0022 nutzt? Wo ist das Problem mit der Zeile char c =’\u000a’; Hilft ein Auskommentieren der Zeile mit //? Aufgabe 5 (3 Punkte) Wir wollen einige java.lang.String-Methoden kennenlernen. Implementieren Sie ein Programm, das ungefähr folgendermaßen benutzt werden kann: $ java StringTest "axel" startsWith "ax" true $ oder allgemeiner $ java <Empfaenger> <Methode> <Argument[e]...> Verwirklichen Sie zumindest fünf Methoden der String-Klasse. Wettbewerb: Versuchen Sie soviele Methoden wie möglich zu implementieren. Pro Methode mit einem Argument gibt es einen Wertungspunkt, bei Methoden mit zwei Argumenten zwei Wertungspunkte, und so weiter. Die Gewinnerin bzw. der Gewinnner erhält ein Präsent!