Sie sind auf Seite 1von 11

MUSTER Prüfungsbogen: 0

EvaExam Probeklausur Programmierung 2 SS18 + Musterlösung

Bitte so markieren: Bitte verwenden Sie einen Kugelschreiber oder nicht zu starken Filzstift. Dieser Fragebogen wird maschinell erfasst.
Korrektur: Bitte beachten Sie im Interesse einer optimalen Datenerfassung die links gegebenen Hinweise beim Ausfüllen.

Bitte ausfüllen (Die Angabe des Namens ist freiwillig.): Matrikelnummer für den Prüfungsbogen Nr.: 0:

Vorname: 0
1
2
3
Nachname: 4
5
6
Für die eindeutige Zuordnung der Prüfung übertragen Sie 7
bitte Ihre Prüfungsteilnehmer-ID gewissenhaft in die dafür 8
vorgesehenen Felder. Alle Seiten sind vollständig
individualisiert und nicht mit anderen Prüfungen tauschbar. 9

1. Generelle Hinweise zur Bearbeitung


- Die Bearbeitungszeit beträgt 2x45 Minuten

- erlaubte Hilfsmittel: 1 selbst erstelltes A4-Blatt

- die Gesamtpunktzahl beträgt 2x45=90 Punkte

- falls Sie sich gesundheitlich außerstande fühlen die Klausur abzulegen geben Sie dies bitte innerhalb der ersten 5
Minuten der Bearbeitungszeit bekannt, ansonsten wird das Gegenteil als gegeben angesehen

- bei allen Aufgaben ist die erreichbare Punktzahl mit angegeben

- generell: schreiben Sie stets nur in die dafür vorgesehenen Flächen oder Platzhalter. Alles, was außerhalb
eingetragen wird, ist für die Korrigierenden nicht (leicht) sichtbar

- falls Sie eine falsche Antwort in einen Platzhalter (Kästchen) eingetragen haben: streichen Sie sie deutlich durch
und schreiben Sie die richtige Antwort direkt daneben

- falls mehr Platzhalter vorhanden sind als für die Lösung benötigt werden, tragen Sie die Lösung ein wie Sie wollen
(egal ob rechts- oder linksbündig)

F19602U0P1PL0V0 09.07.2018, Seite 1/11

MUSTER
MUSTER Prüfungsbogen: 0
EvaExam Probeklausur Programmierung 2 SS18 + Musterlösung

2. Imperative Sprachelemente
2.1 Schleifen und Kontrollstrukturen (2P): Tragen Sie in die Platzhalter (Kästchen) ein, wie oft das folgende Code-
Fragment "Y" schreibt!

for (int i = 15; i > 5 ; i--) {


System.out.println( (i > 8) ? "X" : "Y") ;
}

2.2 Schleifen und Kontrollstrukturen (2P): Tragen Sie in die Platzhalter (Kästchen) ein, wie oft das folgende Code-
Fragment "X" schreibt!

int i = 8;
while (i > 0) {
System.out.println("X") ;
if (--i <= 5) {
break;
}
}

2.3 Schleifen und Kontrollstrukturen (2P): Tragen Sie in die Platzhalter (Kästchen) ein, wie oft das folgende Code-
Fragment "X" schreibt!

int i = 8;
while (i > 0) {
if (i-- >= 5) {
continue;
}
System.out.println("X") ;
}

F19602U0P2PL0V0 09.07.2018, Seite 2/11

MUSTER
MUSTER Prüfungsbogen: 0
EvaExam Probeklausur Programmierung 2 SS18 + Musterlösung

3. Coding Conventions
3.1 Coding Conventions (2P): Finden Sie 4 Stellen in folgendem Code, die nicht dem "Google Java Style" entsprechen?
Pro "Fehler" soll die Zeilennummer und eine kurze, stichwortartige Erläuterung des "Fehlers" angeben werden!
Scheiben Sie Ihre Antworten in das Freitextfeld!
Hinweis: nur ein "Fehler" pro Zeile ist möglich

1 class Google_Style {
2 private int privateInt;

3 /** Prints the internal variable plus a prefix


4 *
5 * @param prefix Is printed before String
6 */
7 public void printVar (String prefix)
8 {
9 String output = prefix + privateInt;
10 if (prefix.equals(""))
11 return;
12 System.out.println(output);
12 }
13 }

3.2 Coding Conventions (2P):Welche Programmfragmente sind korrekt im Sinne des Google Java Style? Zur besseren
Lesbarkeit sind Leerzeichen als "_" geschrieben worden!
for(int_i_=_0;_i_<_10;_i++)
if(i<5_&&_j<5)
double_x_=_3_+_5_+_Math.cos_(1.0);
double_x_=_3_+_5_+_Math.cos(1.0);
for_(int_i_=_0;_i_<_10;_i++)
while(x_<_5)
while_(x_<_5)

F19602U0P3PL0V0 09.07.2018, Seite 3/11

MUSTER
MUSTER Prüfungsbogen: 0
EvaExam Probeklausur Programmierung 2 SS18 + Musterlösung

3. Coding Conventions [Fortsetzung]


3.3 Coding Conventions (2P): Geben Sie den JavaDoc-Kommentar (nach den Regeln des "Google Java Style") an, der
vor folgender Methode stehen müsste:

public float berechneLogarithmus(float x) throws IllegalArgumentException {


if (x < 0) {
throw new IllegalArgumentException ("Argument muss > 0 sein!");
}
return (float)Math.log(x) ;
}

4. Primitive Datentypen und Referenzdatentypen


4.1 Referenzdatentypen (1P): Tragen Sie in den Platzhalter (Kästchen) die Ausgabe des folgenden Code-Fragments ein.
int ref1 = 1;
int ref2 = ref1;
ref2 = 0;
System.out.println(ref1);

4.2 Referenzdatentypen (2P): Tragen Sie in den Platzhalter (Kästchen) die Ausgabe des folgenden Code-Fragments
ein, und ggf. eine Begründung ins Freitextfeld.

int[] ref1 = {1,5,2};


int[] ref2 = ref1;
ref1[2] = 0;
System.out.println(ref2[2]);

F19602U0P4PL0V0 09.07.2018, Seite 4/11

MUSTER
MUSTER Prüfungsbogen: 0
EvaExam Probeklausur Programmierung 2 SS18 + Musterlösung

4. Primitive Datentypen und Referenzdatentypen [Fortsetzung]


4.3 Referenzdatentypen (2P): Tragen Sie in den Platzhalter (Kästchen) die Ausgabe des folgenden Code-Fragments ein!
import java.util.* ;
public class RefDaten {
public static void process(ArrayList<Integer> al) {
al.add(5);
al.add(15);
}

public static void main (String[] args) {


ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
process(list);
System.out.println(list.size());
}
}

4.4 Testen auf Gleichheit (2P): Tragen Sie in den Platzhalter (Kästchen) die Ausgabe des folgenden Code-Fragments ein!
ArrayList<Boolean> list1 = new ArrayList<Boolean>() ;
ArrayList<Boolean> list2 = new ArrayList<Boolean>() ;
list1.add(true); list1.add(true);
list2.add(true); list2.add(true);
System.out.println(list1 == list2 ? 0 : 1) ;

5. Klassen und Vererbung


5.1 Klassenattribute (2P): Tragen Sie in die Platzhalter (Kästchen) die Ausgabe des folgenden Programms ein, und ggf.
eine Begründung ins Freitextfeld.

class A51 {
public static int staticAttr = 1;

public static void main(String[] args) {


A51 k1 = new A51 ();
A51 k2 = new A51 ();
A51.staticAttr = 5;
System.out.println(k1.staticAttr+""+k2.staticAttr);
}
}

F19602U0P5PL0V0 09.07.2018, Seite 5/11

MUSTER
MUSTER Prüfungsbogen: 0
EvaExam Probeklausur Programmierung 2 SS18 + Musterlösung

5. Klassen und Vererbung [Fortsetzung]


5.2 Typsubstitution und Legalität (2P): Geben Sie an, ob der unten stehende Code erfolgreich compiliert werden kann
oder nicht und begründen Sie Ihre Antwort so genau wie möglich! Die Methode toString() existiert in der Klasse
Object und gibt einen String zurück der das Objekt repräsentiert.

ArrayList<Integer> intList = new ArrayList<Integer>();


Object it = intList.iterator();
System.out.println(it.toString());
System.out.println(it.hasNext());

5.3 Konstruktoren (2P): Geben Sie an, ob der unten stehende Code erfolgreich compiliert werden kann oder nicht und
begründen Sie Ihre Antwort so genau wie möglich!
public class KlausurKlasse {
public int x = 1;
KlausurKlasse(int xValue) {
this.x = xValue;
}

public static void main() {


KlausurKlasse kk = new KlausurKlasse();
System.out.println(kk.x);
}
}

F19602U0P6PL0V0 09.07.2018, Seite 6/11

MUSTER
MUSTER Prüfungsbogen: 0
EvaExam Probeklausur Programmierung 2 SS18 + Musterlösung

5. Klassen und Vererbung [Fortsetzung]


5.4 Konstruktoren(2P): Geben Sie an, ob der untenstehende Code compiliert oder nicht und begründen Sie Ihre
Antwort so genau wie möglich!

class TestSuperClass {
TestSuperClass(int x) {
}
}

public class TestSubClass extends TestSuperClass {


TestSubClass() {
}

public static void main(String[] args) {


TestSubClass inst = new TestSubClass();
}
}

5.5 Typsubstitution und Legalität (2P): Geben Sie an, ob das Kommando
executeCode(new CodeContainer()) ;
in der main-Methode des unten stehenden Codes erfolgreich compiliert werden kann oder nicht und begründen
Sie Ihre Antwort so genau wie möglich!

class CodeContainer implements Runnable {


public void run() {
System.out.println("Did something!");
}
}

public class Klausuraufgabe{


static void executeCode(Runnable code) {
code.run();
}

public static void main(String[] args) {


executeCode(new CodeContainer());
}
}

F19602U0P7PL0V0 09.07.2018, Seite 7/11

MUSTER
MUSTER Prüfungsbogen: 0
EvaExam Probeklausur Programmierung 2 SS18 + Musterlösung

5. Klassen und Vererbung [Fortsetzung]


5.6 Polymorphie und Vererbung (2P): Tragen Sie die Ausgabe des folgenden Programms in die Platzhalter ein!
interface Frucht {
public int getWeight();
}

class Melone implements Frucht {


public int getWeight() {
return 1500; // Gewicht in Gramm
}
}

class Weintraube implements Frucht {


public int getWeight() {
return 10; // Gewicht in Gramm
}
}

class Apfel implements Frucht {


public int getWeight() {
return 500; // Gewicht in Gramm
}

public static void main(String[] args) {


Frucht frucht1 = new Apfel();
Frucht frucht2 = new Melone();
Frucht frucht3 = frucht1;
frucht2 = new Weintraube();
System.out.println(frucht3.getWeight());
}
}

F19602U0P8PL0V0 09.07.2018, Seite 8/11

MUSTER
MUSTER Prüfungsbogen: 0
EvaExam Probeklausur Programmierung 2 SS18 + Musterlösung

6. Exceptions
6.1 Fehlerbehandlung (2P): Tragen Sie in die Platzhalter (Kästchen) alle ausgegebenen Zahlen des folgenden
Programms in der richtigen Reihenfolge ein!

import java.io.*;
public class A61 {

public static double exceptional(int i) throws IllegalArgumentException {


if (i < 0) {
throw new IllegalArgumentException();
} else {
return Math.log(i);
}
}

public static void main(String [] args) {


try {
System.out.println("1");
double j = exceptional(-2);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("2");
} catch (IllegalArgumentException e) {
System.out.println("3");
}
System.out.println("5");
}
}

7. Hashing und HashMaps


7.1 HashMaps (2P): Erläutern Sie, was im Kontext assoziativer Datenstrukturen wie HashMaps der Begriff "Kollision" bedeutet!

7.2 HashMaps(2P): Betrachten Sie den Aufruf von get in der letzten Zeile des unten stehenden Code-Fragments und
wählen Sie die Antworten aus, die am besten passen!

HashMap<String,Object> map = new HashMap<String,Object>();


map.put("1",1) ;
map.put("2.0",2.0) ;
map.put("3.0",3) ;
System.out.println(map.get(2.0)) ;

Schlüssel müssen Instanzen von String sein, Werte können Instanzen beliebiger Klassen sein
Schlüssel können Instanzen beliebiger Objekte sein, Werte Instanzen von String
Das Ergebnis von get muss erst eine Typumwandlung durchlaufen, da es formal vom Typ Object ist
Der Aufruf von get liefert null da kein Schlüssel 2.0 existiert
Der Code compiliert nicht, da die gespeicherten Werte vom Typ Object (und keine Unterklassen davon) sein müssen
Der Aufruf von get verursacht eine NoSuchElementException da der Schlüssel nicht existiert

F19602U0P9PL0V0 09.07.2018, Seite 9/11

MUSTER
MUSTER Prüfungsbogen: 0
EvaExam Probeklausur Programmierung 2 SS18 + Musterlösung

8. Iteration
8.1
Iteration (3P): Tragen Sie in die Platzhalter (Kästchen) die Ausgabe des folgenden Code-Fragments ein!
import java.util.*;
public class KlausurIteration {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(1); list.add(8); list.add (2); list.add(4);
Iterator<Integer> it = list.iterator();
it.next();
for ( ; it.hasNext(); ) {
System.out.println(it.next());
}
}
}

8.2 Iteration (2P): Betrachten Sie das unten stehende Code-Fragment und erläutern Sie mit Begründung, wie viele
Aufrufe von it.next() nach der Ausführung des letzten Kommandos noch ohne Probleme durchgeführt werden
können. Erläutern Sie weiterhin, welches konkrete Problem beim darauf folgenden Aufruf von it.next() auftritt!

LinkedList<Double> list = new LinkedList<Double>() ;


list.add(5.0) ; list.add(6.0); list.add (7.0); list.add(0.0) ;
Iterator<Double> it = list.iterator() ;
it.next() ;

9. Threads

F19602U0P10PL0V0 09.07.2018, Seite 10/11

MUSTER
MUSTER Prüfungsbogen: 0
EvaExam Probeklausur Programmierung 2 SS18 + Musterlösung

9. Threads [Fortsetzung]
9.1 Threads (3P): Begründen Sie, ob im unten stehenden Code in der Methode run() ein Schutz durch synchronized {}
nötig ist oder nicht!
import java.util.*;
class Worker implements Runnable {
public ArrayList<Float> x = new ArrayList<Float>();

public void run() {


for (int i = 0; i < 10000; i++) {
this.x.add(500.0);
}
}

public static void main(String[] args) {


Worker w1 = new Worker();
Worker w2 = new Worker();
Thread t1 = new Thread(w1);
Thread t2 = new Thread(w2);

t1.start();
t2.start(); }
}

F19602U0P11PL0V0 09.07.2018, Seite 11/11

MUSTER