Wert bei Objekterzeugung verändern

JuriW

Aktives Mitglied
Guten Abend zusammen!
Ich habe eine Idee, aber leider keine Ahnung, wie ich die umsetzen soll.

Angenommen ich habe eine LinkedList<Kunde> kundenkartei, mit Kunden, jeder Kunde hat verschiedene Attribute (Name, Vorname, Kundennummer) und eine Verwaltung, die Kunden der Liste hinzufügt, und löscht.

Gibt es eine Möglichkeit, dass ich die Kundennummer pro neuerzeugten Kunden um 1 erhöhe?

Das heißt, sobald der Kunde erstellt wird, wird diesem eine neue Kundennummer zugewiesen?Soweit ich mich erinnere existiert der Kunde, wenn ich "Kunde k1 = new Kunde ("Meier", "Hans", 1);" schreibe noch nicht, sondern erst wenn etwas damit passiert, zum Beispiel wenn ich ihn in eine Liste einfüge. Wie teil ich das dem Konstruktor mit, dass er beim nächsten Kunden die Kundennummer um 1 erhöhen soll?

Macht das überhaupt Sinn? Macht eine Liste überhaupt Sinn, oder kann man das eleganter mit einer Map lösen, da eine Map ja einen Key hat?

Vielen Dank und liebe Grüße
 

Robat

Top Contributor
MMn kannst du ruhig eine List verwenden.

Wenn jeder Kunde automatisch eine ID erhalten soll könntest du das über eine statische Variable in der Klasse Kunde regeln die um 1 erhöht wird wenn der Konstruktor aufgerufen wird.
Java:
class Kunde {
    private static int ID_COUNTER = 1;
    private int id;
    private String name;
   
    public Kunde(String name) {
        this.id = ID_COUNTER++;
        this.name = name;
    }
}

Du könntest natürlich auch die neue ID anhand der List-Länge berechnen. new Kunde(name, (kunden.size() + 1))
 

mrBrown

Super-Moderator
Mitarbeiter
Soweit ich mich erinnere existiert der Kunde, wenn ich "Kunde k1 = new Kunde ("Meier", "Hans", 1);" schreibe noch nicht, sondern erst wenn etwas damit passiert, zum Beispiel wenn ich ihn in eine Liste einfüge.
Nein, bei new wird das Objekt erzeugt. (oder beziehst du dich da auf Compiler-Untiefen?)

Eine andere Möglichkeit wäre Benutzung des Fabrik-Patterns, finde ich persönlich schöner.

Wenn man schon die statische Variante nimmt, bieten sich das AtomicInteger bzw AtomicLong an, damit wird's dann auch Threadsafe ;)
 

JuriW

Aktives Mitglied
Okay, vielen Dank für die Aufklärung, dann hab ich wohl irgendwas verwechselt.

Also die Lösung von Robat hat mir schon sehr geholfen, es funktioniert so ohne Probleme, Danke dir nochmal!

einen neuen Kunden erzeuge ich nun so

Code:
int kdID = 0;
verwaltung.kdHinzufügen("Rühl", "Roswitha", kdID);
verwaltung.kdHinzufügen("Zufall", "Rainer", kdID);
//...bliebig viele Kunden

Und es wird pro Kunde immer um 1 inkrementiert, so wie es sich gehört.

Das einzige was mich stört ist eventuell, dass ich int kdID = 0; davor geschrieben habe, da er mir sonst einen Compilerfehler gibt, dass die Variable nicht existiert. Gibt es eine Möglichkeit das eleganter zu lösen?
 

Robat

Top Contributor
Warum gibt es den Parameter kdID denn überhaupt? Der ist doch sowieso immer 0.

BTW:
Der Beitrag von mir oben ist nur Beispielhaft.
Generell würde ich auf davon @mrBrown erwähnte Factory-Pattern zurückgreifen um sowas zu realisieren.
 

JuriW

Aktives Mitglied
Warum nicht? Die kdID gehört doch zum Kunden dazu, oder hab ich einen Denkfehler?

Ich hab leider keine Ahnung was das Fabrik-Pattern sein soll, werds mir aber sofort mal durchlesen.
 

Robat

Top Contributor
Doch sie gehört dazu.
Wenn du es aber mit einer statischen Variable umgesetzt hast kannst du den Parameter auch weglassen weil ja in der Kunden-Klasse dann sowieso sowas steht wie this.id = staticIdCounter++
 

mrBrown

Super-Moderator
Mitarbeiter
einen neuen Kunden erzeuge ich nun so

Code:
int kdID = 0;
verwaltung.kdHinzufügen("Rühl", "Roswitha", kdID);
verwaltung.kdHinzufügen("Zufall", "Rainer", kdID);
//...bliebig viele Kunden

Und es wird pro Kunde immer um 1 inkrementiert, so wie es sich gehört.

Das einzige was mich stört ist eventuell, dass ich int kdID = 0; davor geschrieben habe, da er mir sonst einen Compilerfehler gibt, dass die Variable nicht existiert. Gibt es eine Möglichkeit das eleganter zu lösen?
In diesem Fall bekommen alle Kunden die ID 1 (oder 0, je nachdem ob pre oder post-inkrement).
Damit das funktioniert, musst du entweder den Zähler gänzlich außerhalb der Kunden-Klasse behandeln, oder gänzlich innerhalb, so wie von @Robat gezeigt.
 

JuriW

Aktives Mitglied
Doch sie gehört dazu.
Wenn du es aber mit einer statischen Variable umgesetzt hast kannst du den Parameter auch weglassen weil ja in der Kunden-Klasse dann sowieso sowas steht wie this.id = staticIdCounter++

Leider nicht, oder ich hab was übersehen.
Vielleicht sollte ich noch erwähnen, dass meine main-methode in der Verwaltungsklasse ist?

In diesem Fall bekommen alle Kunden die ID 1 (oder 0, je nachdem ob pre oder post-inkrement).
Damit das funktioniert, musst du entweder den Zähler gänzlich außerhalb der Kunden-Klasse behandeln, oder gänzlich innerhalb, so wie von @Robat gezeigt.

Also es funktioniert gerade so wie ich will, der Zähler ist in der Attributliste von Kunde und statisch. Nur, dass ich, wie gesagt, in der main-methode auch nochmal
Code:
int kdID = 0;
schreiben muss, damit es funktioniert.
 

mrBrown

Super-Moderator
Mitarbeiter
Wie sieht deine Klasse aus?
An zwei Stellen die Variable mit dem gleichen Namen deklarieren ist in diesem Fall alles andere als richtig oder nötig...
 

JuriW

Aktives Mitglied
Also die Verwaltungsklasse mit Main sieht so aus
Code:
import java.util.LinkedList;

public class Vermietung {

    private static LinkedList<Kunde> kunden = new LinkedList<Kunde>();

    public void kdHinzufügen(String vorname, String nachname, int kdID) {

        kunden.add(new Kunde(vorname, nachname, kdID));
    }

    public static void main(String[] args) {

        int kdID = 0;
        Vermietung verwaltung = new Vermietung();

        verwaltung.kdHinzufügen("Fritz", "Egon", kdID);
        verwaltung.kdHinzufügen("Roswitha", "Rühl", kdID);
        verwaltung.kdHinzufügen("Rainer", "Zufall", kdID);

        System.out.println("Liste aller Kunden: ");
        for (Kunde kunde : kunden) {
            System.out.println(kunde);
        }
    }
}

Und die Kundenklasse so:

Code:
public class Kunde {
   
    private String vorname;
    private String nachname;
    private int kdID;
    private static int ID_COUNTER = 1;   
    public Kunde(String vorname, String nachname,  int kdID) {
        this.vorname = vorname;
        this.nachname = nachname;
        this.kdID =ID_COUNTER++;
    }
   
    public String toString() {
 
        return  "KundenID: " + kdID + " Vorname: "   + vorname + " Nachname " + nachname;
    }
}

Der Output sieht so aus

Code:
Liste aller Kunden:
KundenID: 1 Vorname: Fritz Nachname Egon
KundenID: 2 Vorname: Roswitha Nachname Rühl
KundenID: 3 Vorname: Rainer Nachname Zufall

Ich hab den Code stark gekürzt, damit man sich auf das Wesen meiner Frage (die id) beschränken kann.
Und so klappts auch. Wie gesagt, nur das int kdID = 0; ist irgendwie nicht so schön.
 

Robat

Top Contributor
Schau dir mal genau den Konstruktor von Kunde an.
Dir sollte auffallen, dass du nur mit dem Attribut kdID arbeitest .. das lokale Feld kdID benutzt du nicht.
Es würde an der Funktionalität nichts ändern, wenn du den kdID Parameter aus dem Konstruktor raus nimmst. (natürlich dann dem entsprechend auch die Aufrufe anpassen.)
 

JuriW

Aktives Mitglied
Ah, nun hab ichs verstanden.

Ich habe jetzt die kdID aus der Parameterliste des Konstruktors, und aus dem Funktionsaufruf genommen und die ID wird trotzdem angezeigt. Und ich muss davor kein int kdID = 0; mehr schreiben

Vielen Dank für eure Hilfe!
 
Ä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
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
S Bestehendes Java Programm, einen festen Wert ändern Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben