Wert-Orientere Klasse Menge

sh33p

Bekanntes Mitglied
Moin,

ich wollte eine Klasse Menge schreiben, die die typischen Operationen einer Menge bietet(jaja ich weiß es gibt Sets usw.^^)
Ich habe aber leider nur einen Zustandsorientieren Ansatz gefunden, spricht eine Klasse von der Typen angelegt werden können

Java:
import java.util.*;
public class Menge extends ArrayList<Integer>  {

   public  boolean add (Integer i) {     // fuegt ein neues Element hinzu
        if ( i < 0 || this.contains(i) ) {
            return false;
        }

        super.add(i);
        return true;
    }
    public  boolean pruefeElement(int i){ // Prueft ob das Element i in der Menge vorhanden ist
      if(this.contains(i)){

      return true;

      }else
      return false;
    }
    public void remove(Integer i){    // Entfernt das Element an position i
      if(this.contains(i)){
        super.remove(i);

      }
    }
    public boolean pruefeLeer(){     // prueft ob die Menge leer ist
      if(size() == 0){
        return true;
      } else
        return false;
    }

    public static void main(String[] args){


      Menge m1 = new Menge();
      m1.add(1);

      System.out.println(m1.pruefeElement(1));





            }
 
}

Ich fand die ArrayList gut, da man schon einige Funktionalitäten einfach überschreiben kann.
Wie mache ich das ganze nun Wert-orientiert,also nur statische Methoden?
Ich kann dann nicht mehr ArrayList überschreiben, da die Methoden nicht static definiert sind logischerweise.
 

sh33p

Bekanntes Mitglied
Er hat eine Wert Orientierte Klasse definiert als eine Klasse die nur statische methoden enthält.man kann zwar von der klasse instanzen erstellen,nur eben nicht mit ihnen arbeiten.^^
 

XHelp

Top Contributor
Aha...
Naja, dann kannst du ja dennoch nicht von ArrayList ableiten, sondern eine statische ArrayList als Klassen-Variable haben, auf der du genau das gleiche wie in deinem Code machst.
 

sh33p

Bekanntes Mitglied
sieht dann so aus:

Java:
import java.util.*;
public class Menge   {

 static ArrayList l1 = new ArrayList();

   public  static boolean add (Integer i) {     // fuegt ein neues Element hinzu
        if ( i < 0 || l1.contains(i) ) {
            return false;
        }

        l1.add(i);
        return true;
    }
    public  static boolean pruefeElement(int i){ // Prueft ob das Element i in der Menge vorhanden ist
      if(l1.contains(i)){

      return true;

      }else
      return false;
    }
    public static void remove(Integer i){    // Entfernt das Element an position i
      if(l1.contains(i)){
        l1.remove(i);

      }
    }
    public static boolean pruefeLeer(){     // prueft ob die Menge leer ist
      if(l1.size() == 0){
        return true;
      } else
        return false;
    }

    public static void main(String[] args){


      Menge.add(1);





            }
 
}
 
G

Gast2

Gast
mal 2 Verbesserungsvorschläge:
Java:
      if(l1.contains(i)){
 
      return true;
 
      }else
      return false;
=>
Java:
return l1.contains(i);

Java:
      if(l1.size() == 0){
        return true;
      } else
        return false;
=>
Java:
return l1.size() == 0;
 

XHelp

Top Contributor
Die Sichtbarkeit von der ArrayList kannst du noch ändern und die restlichen Methoden auch static machen.
Bei pruefeLeer kannst du z.B. auch folgendes schreiben:
Java:
public static boolean pruefeLeer(){
  return l1.size() == 0;
}

Aber bist du dir sicher, dass du die Aufgabe nicht falsch verstanden hast? Was machst du denn, wenn du 2 Mengen haben willst?
 

sh33p

Bekanntes Mitglied
ich weiß,irgendwie komisch. vor allem,weil er dazu schreibt,das die klasse noch funktionalitäten wie vereinigung und schnittmenge machen kann und das geht ja nun mal nur mit 2 mengen..
ich werde morgen mal nachfragen und mich dann melden.
 
Zuletzt bearbeitet:
G

Gast2

Gast
Ist doch kein Problem:
Code:
public static Menge merge(Menge menge1, Menge menge2)
 

slawaweis

Bekanntes Mitglied
Wie mache ich das ganze nun Wert-orientiert,also nur statische Methoden?
das mir die Begriffe "Zustands- und Wertorientierte Klassen" bisher gar nicht bekannt waren, habe ich gegoogelt und herausgefunden, dass es eigentlich die sehr selten verwendete deutsche Bezeichnung für "mutable" und "immutable" ist. Ich vermute Du hast die Aufgabe nicht richtig verstanden, den eine Mengen-Klasse mit nur statischen Methoden hat in einer objektorientierten Programmiersprache keinen Sinn. Wie es richtig gemacht wird, steht hier:

Objektorientierte Programmierung: Entwurf von Klassendefinitionen

Slawa
 

sh33p

Bekanntes Mitglied
also ich hab nachgefragt. eine wertorientierte klasse ist,wenn sie nach der initalisierung des objektes nichts meh ändert.die werte bleiben gleich.also eben wertorientiert.
für meine klasse menge bedeutet das,das ich nichts mehr an einer menge ändern darf,sondern eine neue erstellen muss,sobald ein element eingefügt wird.
 
G

Gast2

Gast
eine wertorientierte klasse ist,wenn sie nach der initalisierung des objektes nichts meh ändert
Also immutable, wie in slawaweis' Link steht. In deiner Mengenklasse kannst du zunächst mal alle statics rausnehmen.
Dann musst du natürlich noch deine Methoden etwas anpassen, z.b.:
Code:
public Menge add(Integer i)
 
Zuletzt bearbeitet von einem Moderator:

sh33p

Bekanntes Mitglied
Java:
public int remove(Integer i){    // Entfernt das Element an position i
      if(l1.contains(i)){

        ....

      }
    }

da das ganze ja immutable ist,brauch ich eine neue arrayliste,ohne den wert i.nur wie kopiere ich die jetzige und nehme den wert i raus? ich darf ja nichts an der aktuellen arraylist (l1) ändern,sondern muss eine neue erstellen.
 
G

Gast2

Gast
Deine Signatur ist falsch.
Die Rückgabe wäre wieder ein Objekt der Klasse Menge.

Zu deinem Probem:
Erstelle dir eine neue ArrayList und kopiere alle nötigen werte rüber.
Auf basis dieser neuen List erstellst du dir ein neues Mengenobjekt und gibst das zurück. Das machst du analog bei allen methoden.
 

sh33p

Bekanntes Mitglied
Java:
public Menge remove(Integer i){    // Entfernt das Element an position i
      if(l1.contains(i)){
      ......
      Menge neuesObj = new Menge();



      }
    }

beschränken wir uns nur mal auf die Methode remove. Also ich habe eine Klasse Menge mit einer Arraylist,die ja die eigentliche Menge darstellen soll. Jetzt möchte ich aus dieser ArrayList einen Integer Wert i entfernen. Da wir ja von immutable ausgehen -> neues Mengenobjekt mit neuer ArrayList.
Hab ich das richtig verstanden?Kannst du mir mal beim coden helfen?
 
G

Gast2

Gast
Je nachdem wie scharf man immutable definiert wären die Schritte in etwa folgende:
- List klonen
- gewünschte Operation durchführen(add, remove,...)
- neues Mengen Objekt erstellen (new Menge(neueList);)
- objekt zurückgeben
Für den Dritten schritt brauchst du dann noch einen Konstruktor der eine List entgegennimmt.
 

Andi_CH

Top Contributor
Die Sichtbarkeit von der ArrayList kannst du noch ändern und die restlichen Methoden auch static machen.
Bei pruefeLeer kannst du z.B. auch folgendes schreiben:
Java:
public static boolean pruefeLeer(){
  return l1.size() == 0;
}

Aber bist du dir sicher, dass du die Aufgabe nicht falsch verstanden hast? Was machst du denn, wenn du 2 Mengen haben willst?

Hm vielleicht so wie Ada Objektorientiertheit versteht.

(Der Einfachheit halber nur mit einem int als Wert)

Java:
public class WerteKlasse {

	int mWert = 0;
	
	public static int getWert(WerteKlasse pWerteKlasse) {
		return pWerteKlasse.mWert;
	}
	
	public static void setWert(WerteKlasse pWerteKlasse, int pWert) {
		pWerteKlasse.mWert = pWert;
	}
}


Aufruf:

Java:
	private static void testWerteKlasse() {
		WerteKlasse pWk1 = new WerteKlasse();
		WerteKlasse pWk2 = new WerteKlasse();
		WerteKlasse.setWert(pWk1, 1);
		WerteKlasse.setWert(pWk2, 2);
		System.out.println("pWk1.wert = " + WerteKlasse.getWert(pWk1));
		System.out.println("pWk2.wert = " + WerteKlasse.getWert(pWk2));
	}

Output:

pWk1.wert = 1
pWk2.wert = 2
 
Zuletzt bearbeitet:
G

Gast2

Gast
ok und wie klone ich eine Liste tief?

gibt ja eine Methode in ArrayList,aber die kopiert nur flach
Du brauchst doch keine deep copy?

Falls du das doch machen willst:
Java:
    public static ArrayList<Integer> cloneArrayList(ArrayList<Integer> list) {
        ArrayList<Integer> clonedList = new ArrayList<Integer>();
        for (int i : list) {
            clonedList.add(i);
        }
        return clonedList;
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
A Negativ-Wert Java Basics - Anfänger-Themen 4
R finaler Wert in outerMethod von method in InnerMethodClass Java Basics - Anfänger-Themen 2
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Datum als Variable wert Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
T Mit jedem Wert in der for-Schleife weiter arbeiten Java Basics - Anfänger-Themen 3
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
I Historisierung - Alter Wert, Neuer Wert... wie speichern? Java Basics - Anfänger-Themen 44
J Wert in Dropdown Menü kursiv schrieben Java Basics - Anfänger-Themen 19
H Uhrzeitespanne in Integer Wert umrechnen Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
M Wie kann ich festlegen, dass ein Attribut maximal den Wert 0 erreicht, also nicht in den negativen Bereich fällt? Java Basics - Anfänger-Themen 4
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
U Ascii wert verschieben, wie möglich? Java Basics - Anfänger-Themen 3
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
B in einem Array den nächstgelegenen Wert zu einem eingabewert finden Java Basics - Anfänger-Themen 8
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
J Wert zurückgeben über get Methode Java Basics - Anfänger-Themen 8
E Slider - Wert übergeben und überschreiben Java Basics - Anfänger-Themen 5
G Input/Output getText() gibt keinen Wert! Java Basics - Anfänger-Themen 13
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
I Validation, ob String ein Wert aus einem Enum enthält Java Basics - Anfänger-Themen 3
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
T Feststellen, dass Wert zu groß; Caesar Chiffre Java Basics - Anfänger-Themen 3
J maximaler Wert eines Integers Java Basics - Anfänger-Themen 14
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
NeoLexx Abfrage mit instanceof führt zu unerwarteten Wert Java Basics - Anfänger-Themen 9
B Map<String, FilterMeta, wie Wert bekommen? Java Basics - Anfänger-Themen 4
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
V Boolean Wert nicht richtig erkannt Java Basics - Anfänger-Themen 4
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
1 Array nimmt falschen Wert auf! Java Basics - Anfänger-Themen 2
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
V_Fynn03 Erste Schritte Einen Wert in ein TextField einfügen aus einer anderen Klasse Java Basics - Anfänger-Themen 3
J Wert zwischen JFrames übergeben Java Basics - Anfänger-Themen 2
J Umwandlung String zu ASCII-Wert und anders Java Basics - Anfänger-Themen 17
P Verzweigungen Wert zurück geben Java Basics - Anfänger-Themen 2
D Wert des Arrays unter Bedingungen ändern Java Basics - Anfänger-Themen 1
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
F Boolean Methode Wert ausgeben. Java Basics - Anfänger-Themen 2
X Erste Schritte boolean wert ändert sich nicht? Java Basics - Anfänger-Themen 6
T Klassen Den Wert aus Array lesen lassen Java Basics - Anfänger-Themen 12
W Problem mit dem Wert von boolean-Variable Java Basics - Anfänger-Themen 3
J Wie kann ich z.B. einem int-Wert einen String-Wert zuweisen? Java Basics - Anfänger-Themen 2
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2
D integer negativen Wert abspeichern Java Basics - Anfänger-Themen 3
L Wert einer Webeseiteauslesen Java Basics - Anfänger-Themen 6
D Erste Schritte Wert im Array suchen Java Basics - Anfänger-Themen 12
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
S Wert innerhalb eines anderen Wertes Java Basics - Anfänger-Themen 3
S Array doppelter Wert prüfen Java Basics - Anfänger-Themen 7
O Wert in einer Schleife unterschiedlich erhöhen Java Basics - Anfänger-Themen 2
B ArrayList besitzt einen Wert zu wenig Java Basics - Anfänger-Themen 16
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
F Java int-Wert wird resetet Java Basics - Anfänger-Themen 21
J Erste Schritte Wert aus JTextField zurückgeben Java Basics - Anfänger-Themen 6
CptK Bestimmten Integer Wert aus Array filtern Java Basics - Anfänger-Themen 2
B Liste von Integer -> Nächster Wert bekommen Java Basics - Anfänger-Themen 5
J Wert bei Objekterzeugung verändern Java Basics - Anfänger-Themen 12
I bestimmten Wert eines Arrays Java Basics - Anfänger-Themen 23
D Erste Schritte Java speichert wert des Scanners nicht Java Basics - Anfänger-Themen 2
B Erste Schritte if Anweisung mit Wert Übernahme Java Basics - Anfänger-Themen 3
B .txt. Datei auslesen und bestimmten Wert wiedergeben Java Basics - Anfänger-Themen 5
CptK x wert eines Bildes auslesen Java Basics - Anfänger-Themen 1
S boolean Wert von mehreren int Möglichkeiten abfragen ? Java Basics - Anfänger-Themen 4
deatzi Wert aus anderer Klasse lesen Java Basics - Anfänger-Themen 7
D Compiler-Fehler Array an Methode übergeben und Wert zurückbekommen Java Basics - Anfänger-Themen 3
I Schleife fragt Wert ab bis 0 kommt (mit IO.java klasse) Java Basics - Anfänger-Themen 16
O String: Befehl und Wert erkennen. Java Basics - Anfänger-Themen 4
L Methoden Rekursion gibt alten Wert wieder Java Basics - Anfänger-Themen 37
S Wie erhöhe ich den Wert von mehren Integers auf einmal? Java Basics - Anfänger-Themen 5
J Wert eines Arrays einer Variable zuweisen, sobald der Wert eines anderen Arrays eintritt Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben