Hausaufgabe 06 loesung PDF

Title Hausaufgabe 06 loesung
Course Einführung in die Informatik
Institution Technische Universität Berlin
Pages 5
File Size 152.9 KB
File Type PDF
Total Downloads 50
Total Views 141

Summary

Download Hausaufgabe 06 loesung PDF


Description

Einführung in die Informatik - WS 2020/21 Technische Universität Berlin

Neuronale Informationsverarbeitung

Übungsblatt 6 (Block 2) Prof. Dr. Klaus Obermayer und Mitarbeiter Objekte, Attribute, Arrays allgemeiner Datentypen Verfügbar ab: Abgabe bis: Aufgabe 1: Übergabe von primitiven- und Referenzdatentypen

14.12.20 04.01.20 2.5 Punkte

Betrachten Sie folgende drei Klassen: 1 2 3 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

public class Value{ public int x; } public class ValueChanger{ public static void passPrimitiveType(int f){ f = 4; } public static void passReferenceType(Value f){ f.x = 4; } } public class TestValueChanger{ public int int b = x =

static void main(String [] args){ x = 11; b = x; 13; b;

ValueChanger.passPrimitiveType(x); System.out.println(x); x = 10; Value v = new Value(); Value k = v; v.x = x + 3; ValueChanger.passReferenceType(v); System.out.println(v.x); System.out.println(k.x);

weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=21184

1

InfTech 21 22 23 24

WS 2020/21

Übungsblatt 6 (Block 2)

k.x = 1; System.out.println(v.x); } }

• Was wird auf der Konsole ausgegeben? Begründen Sie Ihre Antwort kurz. • Geben Sie weiter an, wie viele Objekte der Klasse Value nach der Zeile 17 im Arbeitsspeicher abgebildet werden.

Musterlösung: Zeile 10 gibt 13 aus, da x primitiver Datentyp ist -> Zuweisungen/Methodenaufrufe übergeben nur den Wert der Variablen. Da Value ein komplexer Datentyp ist, werden die Variablen v und k nach der Zuweisung in Zeile 14 die gleiche Referenz (siehe dazu den Hinweis) haben (Zuweisungen übergeben Referenz). Die Methode passReferenceType bekommt auch diese Referenz übergeben und setzt dort das Attribut auf 2. Daher wird in Zeilen 18,19 die 4 ausgegeben. Zeile 22 gibt 1 aus, da v und k immernoch auf dasselbe Objekt zeigen dessen Attribut in Zeile 21 verändert wurde. Es wird nach Zeile 17 nur ein Objekt im Speicher abgebildet, weil alle Referenzen in diesem Beispiel auf das selbe Objekt verweisen. Hinweis: Es sei an dieser Stelle zusätzlich für Interessierte angemerkt, dass Java nur das Prinzip Call-By-Value beherrscht und kein Call-By-Reference. Im Gegensatz dazu stehen die Sprachen C/C++, in welchen mit Pointern gearbeitet wird. Hier ist auch Call-By-Reference möglich. Das Wort Reference aus Call-By-Reference ist dabei nicht zu verwechseln mit der üblichen Java-Referenz, dem komplexen Datentyp. Aufgabe 2: Haustier

3.5 Punkte

Gegeben ist eine Klasste Haustier mit vier öffentlichen Attributen: 1 2 3 4 5 6 7

public class Haustier { // die Klasse hat 4 Attribute: alter, name, istSaeugetier und gewicht public String name; public int alter; // alter in Jahren public boolean istSaeugetier; public double gewicht; // gewicht in kg }

Implementieren Sie eine Klasse HaustierVerwaltung mit folgenden Anweisungen in der main-Methode: • Deklarieren Sie die Variablen weissbauchigel und chinchilla beide vom Typ Haustier • Erzeugen Sie in seperaten Codezeilen zwei Objekte der Klasse Haustier mit dem new-Operator und weisen Sie jeweils eins weissbauchigel und chinchilla zu. • Weisen Sie den Attributen der Haustier-Objekte weissbauchigel und chinchilla Werte gemäß unten angegebener Tabelle zu. • Die Chinchilla wird 0,2 kg schwerer. Erhöhen Sie das Attribut gewicht von chinchilla dementsprechend. • Geben Sie die Werte der Attribute alter, name und gewicht von chinchilla und weissbauchigel auf der Konsole aus.

weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=21184

2

InfTech

WS 2020/21 Haustier Weissbauchigel Chinchilla

Alter 2 27

Name Sir Lancelot Chili

Übungsblatt 6 (Block 2) Gewicht 0,016 2,4

Säugetier Nein Ja

Die Ausgabe Ihres Programmes könnte z.B. so aussehen: Der Weissbauchigel ist 2 Jahre alt und heisst Sir Lancelot. Er wiegt 0.016 kg. Die Chinchilla ist 27 Jahre alt und heisst Chili. Sie wiegt 2.6 kg. Beantworten Sie die folgende Frage: • Wie lauten die Werte der Attribute alter, name, gewicht und istSaeugetier der Objekte weissbauchigel bzw. chinchilla direkt nach der Erzeugung mit dem new-Operator?

Musterlösung: • Attribute eines Objektes werden durch Erzeugung mit new auf die Standard-Werte des jeweiligen Datentypes gesetzt - soweit nicht anders spezifiziert (im Konstruktor). Speziell bedeutet das, dass für beide Objekte weissbauchigel und chinchilla nach den Zeilen 8 und 9 gilt: alter hat den Wert 0 (Standard von int), name hat den Wert null (Standard von jedem Referenzdatentyp wie String) und istSaeuge hat den Wert false (Standard von boolean). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

public class HaustierVerwaltung { public static void main(String[] args) { // deklariere zwei Variablen vom Typ Haustier Haustier chinchilla; Haustier weissbauchigel; // erzeuge zwei Objekte der Klasse Haustier chinchilla = new Haustier(); weissbauchigel = new Haustier();

// weise den Attributen der zwei Objekte Werte // zu gemaess der gegebenen Tabelle weissbauchigel.alter = 2; weissbauchigel.name = "Sir Lanzelot"; weissbauchigel.istSaeugetier = false; weissbauchigel.gewicht = 0.016; chinchilla.alter = 27; chinchilla.name = "Chili"; chinchilla.gewicht = 2.4; chinchilla.istSaeugetier = true; // chinchilla wird ein Jahr aelter chinchilla.gewicht += 0.2; // += oder + haette auch funktioniert // Ausgabe der Attributwerte der Objekte System.out.println("Der Weissbauchigel ist "+weissbauchigel.alter +" Jahre alt und heisst "+weissbauchigel.name+". Er wiegt " + weissbauchigel.gewicht + " kg."); System.out.println("Die Chinchilla ist "+chinchilla.alter

weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=21184

3

InfTech

WS 2020/21

30 31 32

Übungsblatt 6 (Block 2)

+" Jahre alt und heisst "+chinchilla.name+". Sie wiegt " + chinchilla.gewicht + " kg."); } }

Aufgabe 3: Uni

4 Punkte

Implementieren Sie eine Klasse Student. Fügen Sie die Attribute nachname und vorname vom Typ String und matnr vom Typ int hinzu. In dieser Aufgabe sollen die Attribute von außen sichtbar sein. Testen Sie nun diese Klasse, indem Sie eine weitere Klasse Tub schreiben, die über eine main-Methode verfügt. Gehen Sie dazu wie folgt vor: • Definieren Sie eine Variable m, welche die Anzahl der Studenten in einem Array repräsentiert. m soll über die Terminal-Klasse eingelesen werden (public static int readInt()). • Definieren Sie ein Array vom Typ Student[] mit der Länge m. • Initialisieren Sie nun in einer geeigneten Schleife die Studenten im Array. Die Attribute eines jeden Studenten sollen mithilfe von Benutzereingaben initialisiert werden. Benutzen Sie auch dafür die TerminalKlasse. Führen Sie den Benutzer durch das Programm mithilfe von Konsolenausgaben. • Geben Sie anschließend die Daten aller Studenten mithilfe einer weiteren Schleife auf der Konsole aus.

Musterlösung: 1 2 3 4 5 6

public class Student { // Attribute public String nachname; public String vorname; public int matnr; }

1 2 3

public class Tub { public static void main(String[] args){ System.out.println("Bitte geben Sie die Anzahl der Studenten ein!" );

4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

int m = Terminal.readInt(); Student[] studenten = new Student[m]; // studenten−Array sinnvoll befuellen for (int i = 0;i...


Similar Free PDFs