Konstruktor einer Methode

M

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

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.
 
M

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

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:
M

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

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.
 
M

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

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.
 
M

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

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?
 
M

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.
 
M

Mika34

Bekanntes Mitglied
Denken ist gut, Kontrolle (= Testen) ist besser. Hast du das ausprobiert? Nein, dann probier es aus!
Ja es funktioniert nicht. Es ändert sich mit dieser Methode nix. Auf welche Weise soll man es dann nachträglich verändern, wenn es durch die Methode sowieso keinen Rückgabewert gibt?
 
temi

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

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.
 
M

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

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?
 
M

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
 
M

Mika34

Bekanntes Mitglied
Ich komme echt nicht mehr weiter. Könnte mir bitte jemand einen Gedankenanstoß geben... :(
 
mihe7

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

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.
 
M

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

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;
 
M

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
 
M

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

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.
 
M

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.
 
mihe7

mihe7

Top Contributor
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.
Das macht doch nichts: numberOfAccounts--;
 
Ä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
jmar83 NullPointerException auf member, die per konstruktor gesetzt wird (multithread-kontext) Allgemeine Java-Themen 2
jmar83 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 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
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
J JSON Daten von einer Webseite erhalten Allgemeine Java-Themen 2
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
J Zerlegen einer Zahl Allgemeine Java-Themen 6
Zrebna Wie kann man endgültig aus einer Rekursion ausbrechen? Allgemeine Java-Themen 14
M Person in einer Arraylist hinzugügen mit Prüfung ? Allgemeine Java-Themen 6
Meeresgott Effizientester Weg um nach der Value einer verschachtelten Map aufzulösen Allgemeine Java-Themen 5
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
M Prüfziffer einer EAN Nummer berechnen Allgemeine Java-Themen 4
M Erstellungsdatum einer Datei Allgemeine Java-Themen 10
Drachenbauer Wie kann ich einer existierenden Enum von außerhalb veränderte Werte zuweisen? Allgemeine Java-Themen 5
S HTML den ich von einer URL hole nicht identisch mit dem HTML im Browser Allgemeine Java-Themen 1
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
O Java-Applikation tut in Netbeans, als JAR nicht, wegen Pfadangaben einer benötigten Datei Allgemeine Java-Themen 8
M Hilfe bei einer Java Programmieraufgabe! Ab morgen Montag um 08:00 Uhr Allgemeine Java-Themen 5
J Algorithmen Analyse einer Schleife Allgemeine Java-Themen 6
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
J Die Letzte Zahl aus einer Text datei lesen Allgemeine Java-Themen 8
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
A Mithilfe von einer Nummer einen Namen finden n-Beziehung Allgemeine Java-Themen 8
Scream_ilias Auf einer Website die anmeldedaten eingeben Allgemeine Java-Themen 9
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
I Lohnt sich heutzutage der Aufwand einer Portierung für MacOS Allgemeine Java-Themen 8
J Suchen von einer Scannereingabe in einem HashSet Allgemeine Java-Themen 1
L Echtzeitdaten aus einer Webseite ziehen mit Java Allgemeine Java-Themen 19
V EMail, Attachments auslesen von einer Email Allgemeine Java-Themen 0
T Google Links in einer Liste Allgemeine Java-Themen 4
T Sinn einer toString Methode Allgemeine Java-Themen 3
P Durchlaufen einer Queue Allgemeine Java-Themen 9

Ähnliche Java Themen

Anzeige

Neue Themen


Oben