PDF-Datei

Werbung
pue13
January 28, 2017
1
Aufgabe 1 (Klammern und Anweisungsblöcke)
Wie Sie in der Vorlesung gelernt haben, werden Anweisungsblöcke in Java nicht durch Einrückung, sondern mithilfe von geschweiften Klammern ({,}) festgelegt. Dennoch sollte ein guter Programmierer eine sinnvolle Einrückung bei der Programmierung - egal in welcher Programmiersprache - beachten. ## a) Betrachten Sie den folgenden (syntaktisch und semantisch korrekten)
Java Quellcode und finden Sie ohne Ausprobieren heraus, was die Ausgabe des Programms ist.
class Test{public static void main(String args[]){for(int i=0; i<10; ++i) {
if (i%2==0){System.out.println(args[0]+args[1]+" "+i);} else {System.ou
String[] arr = {"Hallo", "Welt"};Test.main(arr);
1.1
b)
Verifizieren Sie ihre Antwort, indem Sie den Quellcode in eine Codezelle kopieren und ausführen.
## c) Offensichtlich ist dieser Code schwer lesbar. Formatieren Sie den Code durch Einfügen von
Zeilenumbrüchen, Leerzeichen und Einrückungen so um, dass er problemlos lesbar ist.
2
2.1
Aufgabe 2 (Gültigkeitsbereiche)
a)
In der Regel werden Gültigkeitsbereiche in Java durch geschweifte Klammern festgelegt. Überlegen Sie sich ein Beispiel, in dem auf geschweifte Klammern verzichtet werden kann. ## b)
Welchen Wert hat die Variable a am Ende des folgenden Codeausschnitts?
int a = 1;
int b = 2;
while (a < b) {
{
int a = 4;
a += b;
}
a++;
}
a += 4;
1
2.2
c)
Bestimmen Sie alle Scopes des folgenden Codeausschnitts.
int a;
class C {
public void m(double b) {
b += a;
double c = b;
System.out.println(c);
}
}
String func(String d) {
return d.concat("Ende");
}
double e = 4.5;
func("Hallo");
C obj = new C();
obj.m(e);
2.3
d)
Bestimmen Sie - basierend auf dem Code aus Teilaufgabe c) - die Lebensdauer (gemessen in
Zeilennummern) aller Variablen, Objekte, Funktionen und Methoden.
3
Aufgabe 3 (Portieren von Python nach Java)
Gegeben sei das folgende Python Programm:
def some_function(x, y):
z = 5;
if (z > x):
print(x, y)
return x + y
else:
print(z)
return z
a = 4
b = 4.5
c = a + b
a += some_function(b, c)
print(a)
2
3.1
a)
Was ist die Ausgabe des Programms? ## b) Portieren Sie das obige Python Programm in ein
syntaktisch korrektes, semantisch äquivalentes Java-Programm.
Tipp: Realisieren Sie die Ausgaben mithilfe der Methode System.out.println. ## c) Übersetzen Sie die folgende Python-Funktion in eine syntaktisch korrekte, semantisch äquivalente
Java-Funktion. Können Sie auch in Java die Variable wie a für verschiedene Typen wiederverwenden? Wenn ja: unter welchen Voraussetzungen? Wenn nein: warum nicht?
def func():
a = 4
a = "Läuft"
4
Aufgabe 4 (Datentypen und Schleifen)
Im Folgenden sollen Sie ein Java-Programm schreiben und erweitern, das zwei Zahlen miteinander multipliziert und dabei nur die Operatoren + oder - benutzen darf. Nutzen Sie dazu das
vorgegebene Codegerüst. Das Ergebnis der Berechnung soll am Ende des Programms ausgegeben
werden. ## a) Beantworten Sie die folgenden Fragen: 1. Was bewirkt das Schlüsselwort public?
2. Wie wird die main Methode definiert? Was bewirkt die Aneinanderreihung der Schlüsselwörter public static void? 3. Warum braucht jedes Java-Programm eine solche mainMethode? 4. Welchen Zweck erfüllt der Parameter args? Recherchieren Sie, inwiefern dieser
Parameter in Java-Programmen genutzt werden kann.
4.1
b)
Implementieren Sie die Methode multiply, die nur mithilfe des +-Operators zwei ganze Zahlen
miteinander multipliziert und das Produkt zurückgibt. Um die Methode zu testen, instanziieren
Sie in der Methode main ein Objekt der Klasse Calculator und nutzen Sie dieses, um die Methode multiply aufzurufen. Geben Sie anschließend das Ergebnis aus.
4.2
c)
Ersetzen Sie den Typ des Parameters a, sodass a auch eine Gleitkommazahl enthalten kann. Der
Parameter b soll nach wie vor nur Ganzzahlen darstellen.
4.3
d)
Erweitern Sie die Methode multiply, sodass jedes Zwischenergebnis in einem Array gespeichert
wird. Überlegen Sie sich vorher, wie groß das Array sein soll, also für wieviele Elemente es Platz
bieten muss. Nach der Berechnung soll die Methode die Elemente des Arrays mithilfe einer forSchleife ausgeben, bevor das Ergebnis zurückgegeben wird.
In [ ]: class Calculator {
public int multiply(int a, int b) {
return 0;
}
3
public static void main(String[] args) {
}
}
// Programm starten (bitte unverändert lassen)
Calculator.main(null);
5
Aufgabe 5 (Referenzen)
Ähnlich wie Python arbeitet Java mit (Objekt-)Referenzen. Die Klasse String wird von der
Sprache Java bereitgestellt. Objekte dieser Klasse verhalten sich ähnlich zu den aus Python bekannten Objekten der Klasse str. Betrachten Sie zunächst das folgende Programm:
public class Mensch {
public String name = "";
public static void swap(Mensch a, Mensch b) {
Mensch tmp = a;
a = b;
b = tmp;
}
public static void main(String[] args) {
Mensch m1 = new Mensch();
m1.name = "Walter White";
Mensch m2 = new Mensch();
m2.name = "Jessie Pinkman";
swap(m1, m2);
System.out.println(m1.name);
System.out.println(m2.name);
}
}
Mensch.main(null);
5.1
a)
Recherchieren Sie, wie Paramater in Java übergeben werden. Sie sollten dabei über Stichworte
wie call-by-value und call-by-reference stoßen.
5.2
b)
Die Methode swap soll eigentlich zwei übergebene Mensch-Objekte austauschen, d.h. das Attribut name des Objekts m1 soll nach Aufruf der Methode den String “Jessie Pinkman” und,
4
m2.name den String “Walter White” enthalten. Warum gelingt dies im gegebenen Beispiel nicht?
Tipp: Nutzen Sie Pythontutor zum besseren Verständnis.
5.3
c)
Verändern Sie den Rumpf der Methode swap so, dass das in Teilaufgabe b) beschriebene Ergebnis
erzielt wird. Allerdings dürfen Sie die Signatur der Funktion nicht verändern.
5
Herunterladen