Verständnisfrage bei Hausaufgabe

mac21

Aktives Mitglied
Hallo liebe Community,

bei folgender Frage geht es um eine UNI-Hausaufgabe eines Kollegen,
die ihr natürlich NICHT für mich lösen sollt.
Ich habe lediglich ein paar Verständnisfragen dazu...
Die Aufgabenstellung findet ihr hier:

Aufgabe 7.4 [a) und b) jeweils 3 Punkte] (H) String-Mengen
Ziel dieser Aufgabe ist es, eine Klasse ImmutableSet zur Repräsentation von unveränderbaren
Mengen von Strings zu entwickeln. Implementieren Sie die Klasse ImmutableSet
mit Hilfe eines Arrays, in dem jedes Element der repräasentierten Menge genau einmal
vorkommt. Die Klasse ImmutableSet soll folgende Methoden bereitstellen:

a)
• Einen Konstruktor zur Erzeugung einer leeren Menge.
• Eine Methode boolean istElement(String s), die uberprüft, ob der durch s
repräsentierte String in der Menge enthalten ist.
• Eine Methode boolean obermengeVon(ImmutableSet teilmenge), die überprüft, ob die Menge teilmenge in der Menge enthalten ist, die die Methode bereitstellt.
• Eine Methode boolean equals(ImmutableSet other), die uberprüft, ob die
Menge other die gleichen Elemente enthält, wie die Menge, die die Methode
bereitstellt.
b)
• Eine Methode ImmutableSet add(String s), die eine um den String s erweiterte
Menge zurückgibt. Das heißt, der Aufruf m1.add(s) gibt eine Menge m23
zurück, die s und alle Elemente von m1 enthält.
– Falls der String s bereits in der alten Menge enthalten ist, können Sie die
alte Menge zurückgeben.
– Für den anderen Fall erstellen Sie einen zweiten Konstruktor, diesmal einen
privaten Konstruktor, der einen String s und eine Menge alt bekommt und
daraus eine neue Menge erstellt, die beides enthält.
• Eine Methode String toString(), die eine String-Darstellung der Menge erzeugt
und zurückliefert.
Hinweise: Verwenden Sie bei der Implementierung nach Möglichkeit von Ihnen bereits implementierte
Methoden aus anderen Teilaufgaben. Testen Sie Ihre Klasse mit einer sinnvollen
main-Methode. Diese sollte alle Methoden testen und auch mögliche Interaktionen zwischen
den einzelnen Methoden berücksichtigen.

Zusatz: Man SOLL das Array final machen! (Deswegen verstehe ich die Aufgabe nicht mehr)

Die Frage ist also:

Wenn ich in der Klasse ImmutableSet (noch vor dem Konstruktor) also ein "final String[]" deklariere, so MUSS ich es ja direkt füllen.
Bsp:
Java:
 public final String[] menge = new String[]{"1","2","3"};

Nun soll ich einen Konstruktor schreiben, in dem eine leere Menge erzeugt wird...
Leere Menge in eine finale Variable? Impossible!

Ich habe noch einmal nachgefragt: Das Array soll FINAL deklariert werden...
 

mac21

Aktives Mitglied
Und es geht...
ich glaub ich spinne...
ich dachte, das FINAL macht das komplette Array [inkl Inhalt] UNVERÄNDERBAR, so wie "final int a = 5;"
aber es wird ja nur das Array selbst final gesetzt, der Inhalt ist immer noch austauschbar?

Java:
	public final String[] menge = new String[10];
	
	public ImmutableSet() {
		menge[0] = "111";
		System.out.println(menge[0]);
		menge[0] = "222";
		System.out.println(menge[0]);
	}

gibt aus:
111
222

Habt dank, oh JavaMeister!
 

Flown

Administrator
Mitarbeiter
Du musst das aber auch nicht gleich beim deklarieren initialisieren. Du kannst auch soetwas machen:

Java:
class Initialization {
  private final int[] arr;
  
  public Initialization() {
    arr = new int[5];
    // oder: arr = new int[]{1, 2, 3, 4, 5};
  }
}
 

Natac

Bekanntes Mitglied
final vor einer Variablen sorgt dafür (ganz allgemein gesprochen), dass dieser Variable nur EINMAL ein Wert zugewiesen wird. Wann das passiert ist egal. Folgendes ist auch möglich:

Java:
final int i;
if(myCondition()){
 i = 5;
}
else{
 i =42;
}

final garantiert hingegen NICHT, dass der interne Zustand unverändert bleibt. Ist ein array final, so kann sich sein Inhalt trotzdem noch ändern. Gleiches gilt für Objekte. Ich kann der Variablen aber kein neues Array zuweisen.
 
Zuletzt bearbeitet:

mac21

Aktives Mitglied
Danke Natac,

hatte bisher final nur verwendet um "Variablen" als "Konstanten" zu nutzen (ich weiß, der Ausdruck ist i-wie komisch).
Aber dass man den Wert einer finalen Variable im Nachhinein zuweisen kann, das wusste ich nicht.
Da öffnen sich ja Welten, wenn man das nun weiß :D

Klasse, danke!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Verständnisfrage java.util.TimerTask Allgemeine Java-Themen 2
C try-catch Block Verständnisfrage Allgemeine Java-Themen 14
RalleYTN Collections Verständnisfrage zu Objektreferenzen in Listen Allgemeine Java-Themen 5
O log4j - Verständnisfrage Allgemeine Java-Themen 1
L Getter und Setter Verständnisfrage Allgemeine Java-Themen 10
H MVC - Verständnisfrage Allgemeine Java-Themen 12
E Verständnisfrage zu synchronized-Blöcken Allgemeine Java-Themen 3
E Verständnisfrage bezüglich Threads Allgemeine Java-Themen 4
agent47 Plugin System Verständnisfrage Allgemeine Java-Themen 6
T Verständnisfrage bei Nachbarschaftsbetrachtung Allgemeine Java-Themen 8
M Verständnisfrage Exceptions Allgemeine Java-Themen 2
A Generics Verständnisfrage Allgemeine Java-Themen 7
J Verständnisfrage zu Casts auf Interfaces Allgemeine Java-Themen 5
J Verständnisfrage - nested static classes Allgemeine Java-Themen 11
J Verständnisfrage zu exceptions Allgemeine Java-Themen 3
J volatile Verständnisfrage Allgemeine Java-Themen 6
S JAAS - Verständnisfrage Allgemeine Java-Themen 2
G allgemein synchroniszed verständnisfrage Allgemeine Java-Themen 19
V FileWriter und Zahlen (Kein Problem, nur Verständnisfrage) Allgemeine Java-Themen 4
K Verständnisfrage. Allgemeine Java-Themen 9
T Eine Verständnisfrage Allgemeine Java-Themen 15
T Kleine Verständnisfrage zu Stringbuffer Allgemeine Java-Themen 2
sliwalker Verständnisfrage ObserverPattern Allgemeine Java-Themen 2
Vanessa001 Hausaufgabe in Java Allgemeine Java-Themen 7
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben