Klausuraufgaben .

Status
Nicht offen für weitere Antworten.

pojo

Mitglied
Hallo,

ich hoffe, ihr könnt mir weiterhelfen.

Ich habe letztes Semester Bauinformatik gehabt und das Thema ist JAVA. Ich programmiere sehr viel in PHP (nicht OOS), von daher ist mir das alles nicht komplett neu. Aber dennoch irgendwie schwer bzw. anders.. objektorientiert eben.

Ich habe ein Klausur hier, wo mir leider die Lösungen fehlen, daher frage ich hier mal nach (2 Aufgaben)

Aufgabe 1:

Gegeben ist eine Klasse BauinfSet. Die Klasse implementiert die Schnittstelle Set. Die API-Doku finden sie im Anhang.

Code:
import java.util.Iterator;

public class BauinfSet implements Set
{
public BauinfSet()
{
..
}
..
}

Erweitern sie die Klasse BauinfSet um eine öffentliche Methode diff(Set a,Set b):Set, die die Differenz zweier Mengen berechnet und als neue Menge zurückgibt.



SO:

Ich würde jetzt erstmal so weit kommen:

Code:
public Set diff(Set a,Set b)
{

... ??

 // mit s.add(..); fülle ich die neue Menge (die Differenz) und gebe s dann wieder..
       return s;
}

Aufgabe 2:

Nachfolgend ist ein Auszug aus der Imp,ementierung einer Klasse für einfach verkettete Listen gegeben.

Code:
import java.util.Iterator;
public class SimplyLinkedList
{
private Link head;
public SimplyLinkedList()
{
head = new Link(null,null);
head.next = head;
}
..
class Link
{
Link next;
Object element;

public Link(Object e, Link n)
{
element = e;
next = n;
}
}
}

1) Erweitern sie die Klasse um eine Methode count(Object x):int die zählt, wie oft das übergebene Objekt in der Folge vorhanden ist.
2) Implementieren sie einen Iterator für die Klasse SimplyLinkedList


Danke schonmal..
 

diggaa1984

Top Contributor
zur Aufgabe 1:

wenn das Set welches implementiert wird, das java.util.Set ist, dann gibts da ne Methode für den Schnitt 2er Sets.
boolean retainAll(Collection<?> c)

Retains only the elements in this set that are contained in the specified collection (optional operation). In other words, removes from this set all of its elements that are not contained in the specified collection. If the specified collection is also a set, this operation effectively modifies this set so that its value is the intersection of the two sets.

Parameters:
c - collection containing elements to be retained in this set
Returns:
true if this set changed as a result of the call
Diese Methode müsste in der API zu finden sein, wenn es das java-set ist, andernfalls müsstest die API der Setklasse mal zeigen.

Dein Set, somit auch deine BauinfSet-Klasse wären dann als Parameter gültig, da diese dann auch von der Collection abgeleitet worden sind (Set extends Collection)

damit keines der ursprünglichen Sets verändert wird, kannst du quasi Set a in ein neues Set kopieren, das neue Set mit b schneiden, und die Schnittmenge wäre dann im neuen Set. Das kannst dann zurückgeben.
 

pojo

Mitglied
also im Anhang gibts für Set nur folgende Methoden: add, remove, iterator, contains, size.

Also soll man nur diese benutzen..

Was ich nicht ganz verstehe ist, was mit der Differenz gemeint ist? In der Menge sind - von meinem Verständnis her - irgendwelche Werte..
 

diggaa1984

Top Contributor
ups, is heut nich mein Tag ... Differenz <> Schnitt :roll:

bleibt ja nur soetwas wie: Menge A ohne Menge B also: A \ B

dazu musst dann schaun, welche Objekte von B in A liegen und diese dann in A entfernen. Oder einfacher, da du eh eine neue Differenzmenge erstellen sollst ... Alle Objekte aus A die nicht in B liegen, der neuen Differenzmenge hinzufügen.

D(A,B) = {x | x in A und x nicht in B} == A \ B
D(B,A) = {x | x in B und x nicht in A} == B \ A

kommt also drauf an wie du das ganze aufrufst, denkbar wäre:
Code:
public static Set diff(Set a, Set b)
hierbei musst du festlegen was von wem abgezogen wird

Code:
public Set diff(Set b)
hier kannst diese Methode auf einem Set aufrufen, und ziehst dann das übergebene ab, wäre in meiner Vorstellung verständlicher .. also das neue Set enthält alle Items aus dem aktuellen Set, welche nicht in b vorkommen.

Dazu musst dann mit deinen Methoden per contains den Inhalt, bzw die Werte vergleichen.
 

pojo

Mitglied
Stimmt, jetzt weiß ich auch wie die Aufgabe gemeint ist..

Ich durchlaufe zB. die Menge A mit einem Iterator ( Iterator it = a.iterator(); ) und prüfe bei jedem Element, ob it.contains(b) .. bei false pack ich den Wert in eine neue Menge per .add(..) und returne die neue Menge.

OK - soweit so gut. Wie sieht es mit der 2. Aufgabe aus? Da soll ich ja die count(Object x) Methode schreiben, die zählt, wie oft das Object in der Folge vorhanden ist.. hört sich irgendwie wie Aufgabe 1 an?
 

diggaa1984

Top Contributor
pojo hat gesagt.:
Ich durchlaufe zB. die Menge A mit einem Iterator ( Iterator it = a.iterator(); ) und prüfe bei jedem Element, ob it.contains(b) .. bei false pack ich den Wert in eine neue Menge per .add(..) und returne die neue Menge.

hm, kannst mal zeigen was zu der Methode contains alles steht .. weil contains prüft für mich ob ein Element in der Menge vorhanden ist, mit dem Iterator packst du direkt Elemente an, kannst also nicht direkt sagen it.xx().contains(..) .. sinniger wäre sowas wie:

Code:
aktuellesElement = it.next();
if (!(b.contains(aktuellesElement)) {
 diffmenge.add(aktuellesElement)
} //else ist in B vorhanden und darf nicht hinzugefügt werden

in der 2. Aufgabe. schnappst dir den zu bauenden Iterator, und rennst über die komplette Liste. Wenn die Elemente mit x übereinstimmen, dann zählst hoch .. wie die Einstimmigkeit definiert wird, musst ma guggn .. ob das gleiche spezifische Werte sind, oder wirklich identische Objekte
 

pojo

Mitglied
Code:
aktuellesElement = it.next();
if (!(b.contains(aktuellesElement)) {

genau so meinte ich es.

Vielleicht nochmal etwas Grundsätzliches:

zB. diese Set-Geschichte, wenn man das per import java.util.Set; importiert, braucht man doch nicht nochmal ein Interface zu schreiben, oder? Ich habe hier noch einen Übungszettel, da wird das Interface Set erstellt (Set.java): public interface Set<E> { int size(); contains(E x); ... }

Ist das nur zum Verständnis? Oder reicht es bei solchen Sachen wie Set oder Iterator nicht, wenn man sie importiert?
 

diggaa1984

Top Contributor
naja soetwas selbst zu bauen, is dann im Verständniss begründet. Wenn der Prof dann eine mögliche funktionierende Implementierung dieses Sets vorlegt, und verlangt, dass ihr damit arbeiten müsst, is die Nutzung von java.util.Set quasi verboten. Das dient also alles der Übung, und in dem Fall musst wohl das Set eures Profs nutzen. Alles andere wäre natürlich komfortabler :D .. aber da musste ich auch durch, wir ham uns früher auch Listen und Baum-Klassen selbst schreiben müssen, nur zum Verständniss.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Klausuraufgaben Java Basics - Anfänger-Themen 27
G Klausuraufgaben Java Basics - Anfänger-Themen 6

Ähnliche Java Themen


Oben