Konstruktor einer Methode

Mika34

Bekanntes Mitglied
Guten Tag an alle,
Ich stehe gerade vor einem relativ großen Problem. Ich möchte gerade eine Klasse erstellen, die den Namen Laden trägt. In meinem ganzen Programm existiert dann genau ein Laden. In dieser Klasse möchte ich bis zu 200 verschiedene Gegenstände speichern, wohlmöglich als Array. Außerdem will ich bis zu 150 verschiedene Nutzeraccounts, wohlmöglich auch als Array, speichern. Mein Ansatz war, dass ich einen Konstruktor erstelle, welcher zwei Arrays der Länge 200 und 150 beinhaltet, damit die Gegenstände und Nutezraccounts darin gespeichert werden können.

Bin ich auf dem Holzweg oder würde das Prinzip dafür klappen? Wäre sehr froh über eine Rückmeldung :)
Java:
public class Laden {
    
    int gegenstandSumme [];
    int nutzeraccountSumme [];
    public Laden() {
        gegenstandSumme = new int[100];
        nutzeraccountSumme = new int[100];
    }
 

mihe7

Top Contributor
vor einem relativ großen Problem
Mehr relativ als groß :)
Mein Ansatz war, dass ich einen Konstruktor erstelle, welcher zwei Arrays der Länge 200 und 150 beinhaltet, damit die Gegenstände und Nutezraccounts darin gespeichert werden können.
Das wäre möglich. Für dynamische Listen verwendet man aber List-Objekte (außer, Du darfst/sollst diese nicht verwenden).

Unabhängig davon: in Deinem Code hast Du int-Arrays, Du willst aber Arrays von Nutzeraccount- und Gegenstand-Objekten.
 

Mika34

Bekanntes Mitglied
Mehr relativ als groß :)

Das wäre möglich. Für dynamische Listen verwendet man aber List-Objekte (außer, Du darfst/sollst diese nicht verwenden).

Unabhängig davon: in Deinem Code hast Du int-Arrays, Du willst aber Arrays von Nutzeraccount- und Gegenstand-Objekten.
Da Nutzeraccount und Gegenstand eigene Klassen sind und ich hier die Objekte der Klassen verwenden will, muss ich dann statt dem int, den Klassennamen schreiben? Ich verstehe nicht wie ich die hier dann implementieren soll. Oh Gott, das Programmieren...
 

temi

Top Contributor
Da Nutzeraccount und Gegenstand eigene Klassen sind und ich hier die Objekte der Klassen verwenden will, muss ich dann statt dem int, den Klassennamen schreiben?

Ja. Du kannst natürlich Arrays für alle möglichen Typen erzeugen. Dies können einfache Typen wie int sein, aber auch komplexe Typen, wie Klassen.

Ich verstehe nicht wie ich die hier dann implementieren soll.

Du erstellst einfach eine Klasse in einer separaten Datei und verwendest diese, z.B.

Java:
public class User {
     private String name;

     public User(String name) {
          this.name = name;
     }

     public String getName() {
          return name;
     }
}

Verwendung:

Java:
public class Laden {
     private User[] users;

     public void addUser(User user) {
          // user dem Array hinzufügen
     }
}
 
Zuletzt bearbeitet:

Mika34

Bekanntes Mitglied
Ja. Du kannst natürlich Arrays für alle möglichen Typen erzeugen. Dies können einfache Typen wie int sein, aber auch komplexe Typen, wie Klassen.



Du erstellst einfach eine Klasse in einer separaten Datei und verwendest diese, z.B.

Java:
public class User {
     private String name;

     public User(String name) {
          this.name = name;
     }

     public String getName() {
          return name;
     }
}

Verwendung:

Java:
public class Laden {
     private User[] users;

     public void addUser(User user) {
          // user dem Array hinzufügen
     }
}
Dann müsste ich eine if-Anweisung machen, oder?
Wenn der Array users kleiner gleich 100 ist, wird es hinzugefügt ansonsten nicht, oder?
 

mihe7

Top Contributor
Wenn der Array users kleiner gleich 100 ist, wird es hinzugefügt ansonsten nicht, oder?
Fast. Ein Array hat eine unveränderliche Größe (z. B. 100). Wenn Du Benutzer ins Array einfügst, musst Du selbst mitzählen, damit Du weißt, ob und welcher Platz frei noch frei ist. Beim Löschen musst Du Benutzer im Array verschieben etc.
 

Mika34

Bekanntes Mitglied
Fast. Ein Array hat eine unveränderliche Größe (z. B. 100). Wenn Du Benutzer ins Array einfügst, musst Du selbst mitzählen, damit Du weißt, ob und welcher Platz frei noch frei ist. Beim Löschen musst Du Benutzer im Array verschieben etc.
Edit, ich habe es lösen können. :) . Habe es dann über eine if-Anweisung und 2 for-Schleifen gelöst.
 

mihe7

Top Contributor
Warum willst Du denn den Code privat schicken? Du kannst den einfach hier einstellen oder mit Worten beschreiben, wozu Du die beiden Schleifen verwendest.
 

Mika34

Bekanntes Mitglied
So bin ich das Problem nun angegangen.

Java:
public class Laden {
   
    Account nutzeraccountSumme [];
    Artikel gegenstandSumme [];
   
   
   
   
   
    public void addAccount(Account account) {
        Account [] accountR;
        if(nutzeraccountSumme.length<100) {
            accountR=new Account[nutzeraccountSumme.length+1];
            for(int i=0; i<nutzeraccountSumme.length;i++) {
            accountR[i]=nutzeraccountSumme[i];
                for(int y=nutzeraccountSumme.length-1; y<accountR.length; y++ ) {
                    accountR[nutzeraccountSumme.length]=account;
                }
            }
        }
        else {
            accountR=new Account[nutzeraccountSumme.length];
        }
    }
 

mihe7

Top Contributor
Deine Methode ändert nur lokale Variablen. Genauso gut kannst Du schreiben:
Java:
public void addAccount(Account account) {
}

Mir ist auch nicht klar, was Du in der Methode eigentlich machen willst. Willst Du in eine Liste, die Platz für 100 Benutzer hat, einen weiteren Benutzer eintragen oder willst Du eine Liste haben, die "sich selbst" erweitert?
 

Mika34

Bekanntes Mitglied
Deine Methode ändert nur lokale Variablen. Genauso gut kannst Du schreiben:
Java:
public void addAccount(Account account) {
}

Mir ist auch nicht klar, was Du in der Methode eigentlich machen willst. Willst Du in eine Liste, die Platz für 100 Benutzer hat, einen weiteren Benutzer eintragen oder willst Du eine Liste haben, die "sich selbst" erweitert?
Ich möchte den Account, der in der Methode übergeben wird hinzufügen zu meinem Laden. Aber wenn im Laden dann schon 100 Accounts drin sind, soll nichts passieren und es wird kein Account hinzugefügt. Und mit der Methode dachte ich, dass es damit dann geht.
 

temi

Top Contributor
Wie @mihe7 schon geschrieben hat. Die einfachste Lösung wäre es eine zusätzliche Instanzvariable zu haben, die mitzählt, wieviele Account sich bereits im Array befinden. Dann weißt du
  1. ob noch Platz frei ist
  2. an welcher Stelle der neue Account gespeichert werden muss.
 

temi

Top Contributor
Auf welche Weise soll man es dann nachträglich verändern, wenn es durch die Methode sowieso keinen Rückgabewert gibt?
Das verstehe ich nicht. Diese Methode braucht nicht zwingend einen Rückgabewert. Sie soll einfach nur den übergebenen Account im Array "nutzerAccountSumme" speichern. Der Name ist übrigens irgendwie schräg.
 

Mika34

Bekanntes Mitglied
So sollte es dann passen, oder nicht?
Java:
    public void addAccount(Account account) {
        int n=100;
        if(nutzeraccountSumme.length<n) {
            nutzeraccountSumme[nutzeraccountSumme.length]=account;
        }
        else {
            //Nix passiert, da dann Array zu groß
        }
    }
 

temi

Top Contributor
So sollte es dann passen, oder nicht?
Java:
    public void addAccount(Account account) {
        int n=100;
        if(nutzeraccountSumme.length<n) {
            nutzeraccountSumme[nutzeraccountSumme.length]=account;
        }
        else {
            //Nix passiert, da dann Array zu groß
        }
    }

Nö. Ausprobiert?

An welcher Stelle im Array wird in deinem Code der neue Account gespeichert?

Edit: An welcher Stelle im Array müsste ein neuer Account gespeichert werden, wenn das Array leer ist?

Und an welcher Stelle der nächste hinzugefügte Account?
 

Mika34

Bekanntes Mitglied
Dann kannst du auch nichts darin speichern.
Also um alles klar zu stellen. Ich möchte doch eigentlich zu meinem Array Objekte hinzufügen. Dieses Hinzufügen von Objekten klappt so lange bis der Array die Länge 100 erreicht hat, danach können dann keine neuen Objekte mehr hinzugefügt werden. Das ist dann doch der Ansatz. Oder verplane ich hier schon etwas
 

mihe7

Top Contributor
Dein Array funktioniert wie ein Regal. Du baust ein Regal mit z. B. 100 Fächern (array.length == 100). Die sind zu Beginn "leer" und dann musst Du damit beginnen, sie zu füllen.
 

temi

Top Contributor
Dein Array funktioniert wie ein Regal. Du baust ein Regal mit z. B. 100 Fächern (array.length == 100). Die sind zu Beginn "leer" und dann musst Du damit beginnen, sie zu füllen.

Um das noch etwas auszuführen:

Java:
int[] regal; // Hier sagst du das du ein Regal für int's haben möchtest, aber das Regal existiert noch nicht

regal = new int[100]; // Hier baust du das Regal für 100 int's. Allerdings ist es noch leer.

regal[0] = 42; // Damit hast du "42" in das Fach 0 gelegt

int position = 0;

regal[position] = 42 // das hat denselben Effekt wie zwei Zeile oberhalb. 42 ins Fach 0.
 

Mika34

Bekanntes Mitglied
Code:
    private    Account [] accountAmmount=new Account[100]; //
Also habe ich einen Array, welcher 100 Elemente enthält. Da diese zu Beginn unbefüllt sind, kann ich eine Fallunterscheidung mit 0 machen. Wenn der Array an der Stelle i = 0 ist, dann wird der Account dort gespeichert, ansonsten nicht. Das würde gehen, oder?
 

temi

Top Contributor
Code:
    private    Account [] accountAmmount=new Account[100]; //
Also habe ich einen Array, welcher 100 Elemente enthält. Da diese zu Beginn unbefüllt sind, kann ich eine Fallunterscheidung mit 0 machen. Wenn der Array an der Stelle i = 0 ist, dann wird der Account dort gespeichert, ansonsten nicht. Das würde gehen, oder?

Im Prinzip ja, aber da es sich um Objekte handelt, die ins Array kommen, ist der "Wert" nicht "0" sondern "null". Die einfachere Lösung ist allerdings weiterhin sich einfach zu merken, wo das letzte Element abgelegt wurde (bzw. das aktuelle Element abgelegt werden soll):

Java:
private Account[] accounts = new Account[100];
private int currentAccount = 0;
 

Mika34

Bekanntes Mitglied
Im Prinzip ja, aber da es sich um Objekte handelt, die ins Array kommen, ist der "Wert" nicht "0" sondern "null". Die einfachere Lösung ist allerdings weiterhin sich einfach zu merken, wo das letzte Element abgelegt wurde (bzw. das aktuelle Element abgelegt werden soll):

Java:
private Account[] accounts = new Account[100];
private int currentAccount = 0;
Ich habe mir deinen Tipp und mihe7 Tipp den ganzen Tag angesehen, bin aber einfach nicht schlau geworden. Das erste Element wird natürlich an der 0. Stelle abgelegt und das Letzte an der 99. . Dadurch bin ich aber komplett an die Wand gefahren
 

Mika34

Bekanntes Mitglied
Geht dieser Ansatz in die richtige Richtung?
Code:
public void addAccount(Account account) {
        for(int i=0; i<accountAmmount.length; i++) {
            if(accountAmmount[i]==null) {
                accountAmmount[i]=account;
            }
        }
    }
 

mihe7

Top Contributor
Die Idee ist schon mal nicht schlecht - allerdings müsstest Du die Schleife dann auch abbrechen (z. B. ein break; nach der Zuweisung), sonst füllst Du ja sämtliche Fächer Deines Regals mit dem selben Account auf.

Tatsächlich brauchst Du aber gar keine Schleife sondern einfach eine weitere Instanzvariable, die mitzählt, wie viele Fächer schon gefüllt wurden:
Java:
privaet int numberOfAccounts;

public void addAccount(Account account) {
    if (numberOfAccounts < accountAmount.length) {
        accountAmount[numberOfAccounts] = account;
        numberOfAccounts++;
    }
}

EDIT: Bedingung geändert.
 

Mika34

Bekanntes Mitglied
Die Idee ist schon mal nicht schlecht - allerdings müsstest Du die Schleife dann auch abbrechen (z. B. ein break; nach der Zuweisung), sonst füllst Du ja sämtliche Fächer Deines Regals mit dem selben Account auf.

Tatsächlich brauchst Du aber gar keine Schleife sondern einfach eine weitere Instanzvariable, die mitzählt, wie viele Fächer schon gefüllt wurden:
Java:
privaet int numberOfAccounts;

public void addAccount(Account account) {
    if (numberOfAccounts < accountAmount.length) {
        accountAmount[numberOfAccounts] = account;
        numberOfAccounts++;
    }
}

EDIT: Bedingung geändert.
Das müsste ich vielleicht noch erwähnen. Diesen Ansatz mit der Instanzvariable hatte ich eigentlich verworfen, weil ich zusätzlich später eine Methode implementieren muss, die ein Element des Arrays löschen soll bzw. einen Account löscht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Instanz in einer Klasse erstellen, und dem Konstruktor die eigene Klasse mitgeben Allgemeine Java-Themen 4
B Parameter Konstruktor plus rechnen Allgemeine Java-Themen 6
M Frage zum Konstruktor Allgemeine Java-Themen 2
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
J Konstruktor in JSP beim Kompilieren nicht gefunden Allgemeine Java-Themen 3
J Inner class + Leer-Konstruktor Allgemeine Java-Themen 1
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
H Beim Konstruktor "this" Allgemeine Java-Themen 4
K Variablen Konstruktor, unendlich viele Allgemeine Java-Themen 3
T Konstruktor löst exception aus Allgemeine Java-Themen 7
C Klassen und Konstruktor Allgemeine Java-Themen 2
W Threads NullPointer: Konstruktor "zu langsam"? Allgemeine Java-Themen 3
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
M Klassen Klasse Dynamisch laden und Konstruktor aufrufen Allgemeine Java-Themen 1
DStrohma In abstrakter Klasse Konstruktor von Instanz implementieren Allgemeine Java-Themen 11
C Reflektions, Benutzer soll Konstruktor auswählen und Parameter übergeben können Allgemeine Java-Themen 5
S OOP this-Referenz als Konstruktor-Übergabe Allgemeine Java-Themen 8
ruutaiokwu NullPointerException auf member, die per konstruktor gesetzt wird (multithread-kontext) Allgemeine Java-Themen 2
ruutaiokwu auf priv. konstruktor von "aussen" zugreifen? Allgemeine Java-Themen 4
A Methoden laufen im Konstruktor, außerhalb allerdings nicht Allgemeine Java-Themen 2
E Array im Konstruktor übergeben Allgemeine Java-Themen 3
A Reflection Konstruktor Parameter Supertyp Allgemeine Java-Themen 2
X Dynamisch Konstruktor aufrufen Allgemeine Java-Themen 12
J abstrakte Klassen, Konstanten und Konstruktor Allgemeine Java-Themen 9
E Finale Attribute und Konstruktor Allgemeine Java-Themen 3
S Konstruktor ermitteln Allgemeine Java-Themen 3
B Konstruktor wird nicht aufgerufen Allgemeine Java-Themen 4
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
S Neue Instanz eines Objekts erzeugen - Konstruktor erhaelt Parameter. Allgemeine Java-Themen 5
B Konstruktor - Vererbungsproblem Allgemeine Java-Themen 2
S konstruktor vererben Allgemeine Java-Themen 5
B Problem mit Methodenaufruf in Konstruktor Allgemeine Java-Themen 6
D [SOLVED] Collection wird nicht richtig per Konstruktor übernommen Allgemeine Java-Themen 8
M Konstruktor / statischer Block Allgemeine Java-Themen 13
Ark Konstruktor per Reflection nicht bekannt Allgemeine Java-Themen 4
J Klasse auf Konstruktor oder Methode testen? Allgemeine Java-Themen 3
Junktyz Konstruktor Allgemeine Java-Themen 9
T Schleife im Konstruktor? Allgemeine Java-Themen 9
conan2 super-super-Konstruktor? Allgemeine Java-Themen 3
P static-Methode aus dem Konstruktor aufrufen Allgemeine Java-Themen 6
F Werte von Member-Variablen erst im Konstruktor setzen? Allgemeine Java-Themen 7
MQue zaehlen im Konstruktor Allgemeine Java-Themen 3
V Initialisierung nur im Konstruktor? Allgemeine Java-Themen 14
J Konstruktor-Aufruf nur aus einem bestimmten Package erlauben Allgemeine Java-Themen 5
T Konstruktor von Hashtable unter Java 5.0! Allgemeine Java-Themen 3
M Feld initialisieren, direkt oder Konstruktor Allgemeine Java-Themen 2
D super-Konstruktor ist nicht super ;) Allgemeine Java-Themen 6
A Objektmethode aus Konstruktor aufrufen? Allgemeine Java-Themen 14
7 Konstruktor Allgemeine Java-Themen 12
M Konstruktor, der Excpetions wirft Allgemeine Java-Themen 2
H Super-Konstruktor Allgemeine Java-Themen 7
A Exception in Konstruktor - trotzdem wird Objekt erzeugt! Allgemeine Java-Themen 3
S Konstruktor vererben Allgemeine Java-Themen 9
thE_29 String Konstruktor - Umwandlungsprobleme Allgemeine Java-Themen 5
J Probleme mit dem Konstruktor Allgemeine Java-Themen 8
G Konstruktor-Aufruf nun mit oder ohne Typ? Allgemeine Java-Themen 9
D Kein public Konstruktor Allgemeine Java-Themen 4
K Exception im Konstruktor / Objekt == null Allgemeine Java-Themen 7
S konstruktor nur innerhalb der klasse aufrufbar Allgemeine Java-Themen 5
S konstruktor im interface Allgemeine Java-Themen 5
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
M Methodenübersicht einer Klasse einsehen Allgemeine Java-Themen 14
T JNA, Aufruf der Funktionen einer dll Allgemeine Java-Themen 5
I Vom Monolith zu Services in einer Webseite Allgemeine Java-Themen 1
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
O Werte einer Generic LinkedList zusammenrechenen Allgemeine Java-Themen 14
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
S HTML einer Webseite 1:1 so bekommen wie es auch der Browser anzeigt? Allgemeine Java-Themen 14
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
D Abbruch einer ViewScoped Bean in Arbeit Allgemeine Java-Themen 2
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
Lukas2904 Wie kann man cps (ClicksPerSecond) in einer GUI anzeigen lassen? Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
N BlueJ Implementation einer Analoguhr Allgemeine Java-Themen 0
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
N Speicherort einer Datei im Explorer ändern Allgemeine Java-Themen 8
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben