Array zur Laufzeit bearbeiten?

Wuast

Bekanntes Mitglied
Hallo,
kann mir jemand ein paar Tipps geben, wie das umzusetzen ist?

1. In einer Klasse möchte ich einen Array haben, dessen Felder auf Objekte verweisen.
Java:
int [] array = new int [2];

ich habe jetzt zwei Objekte erzeugt

Java:
konto objekt1 = new Tagesgeld("Vorname", "Nachname", 123456, 100.50); //Kontonr. und Saldo
konto objekt2 = new Depot("Vorname", "Nachname", 654321, 500.10); //gleiche Parameter

wobei entsprechende Klassen mit Vererbungen existieren:

Java:
public class Superklasse {
    String vorname;
    String nachname;
    int kontonummer;
    double saldo;
    
    public Superklasse (String vorname, String nachname, int kontonr., double saldo)
        this.vorname = vorname;
        this.nachname = nachname;
        this.kontonummer = kontonr.;
        this.saldo = saldo;
}


public class Tagesgeld extends Superklasse {
    
    
    int dauerDerAnlage = 2;
    double zinssatz = 3.5;    //schön wärs :D
    
    //hier jetzt vereinfacht
    public static double saldoMitZinsen[]{
        
        double saldoNeu = (kontostand * dauerDerAnlage * zinssatz) / 36000;
        
        return saldoNeu;
    }
}

wie kann ich jetzt den Positionen im Array ein Objekt der Klasse Tagesgeld und Depot zuweisen?

2. Wie kann ich zur Laufzeit neue Objekte der zwei Typen dem Array zufügen oder löschen? Also ich sitze am Bankschalter und ein Kunde eröffnet ein neues Depot. Dann muss ich ja den Array erweitern und neue Eingaben (Namen und die anderen Parameter) machen können.

Freue mich über Tipps und Hinweise.
Falls ich grobe Fehler in den Codes oben gemacht habe, freue ich mich natürlich auch über ein Feedback.

Schönen Sonntag allerseits :)
 

mihe7

Top Contributor
1. In einer Klasse möchte ich einen Array haben, dessen Felder auf Objekte verweisen.
Java:
int [] array = new int [2];
Äh, das ist ein int-Array...

wie kann ich jetzt den Positionen im Array ein Objekt der Klasse Tagesgeld und Depot zuweisen?
Java:
Superklasse[] array = new Superklasse[2];
array[0] = objekt1;
array[1] = objekt2;

2. Wie kann ich zur Laufzeit neue Objekte der zwei Typen dem Array zufügen oder löschen? Also ich sitze am Bankschalter und ein Kunde eröffnet ein neues Depot. Dann muss ich ja den Array erweitern und neue Eingaben (Namen und die anderen Parameter) machen können.
Ein Array hat eine fixe Größe, die nicht verändert werden kann. Du willst eine Liste. Die kann man mit Arrays bilden, indem man beim Hinzufügen ein neues (größeres) Array erstellt, das alte kopiert und dann das neue Element anfügt. Das ist letztlich das, was ArrayList macht.
 

Wuast

Bekanntes Mitglied
Äh, das ist ein int-Array...


Java:
Superklasse[] array = new Superklasse[2];
array[0] = objekt1;
array[1] = objekt2;
Und wie ist die Objekterzeugung direkt bei der Array-Feld-Erzeugung möglich? Also sinngemäß
Java:
array[3] = new objekt
? Hier wenn ich ein objekt3 zur Laufzeit erzeugen lassen möchte muss ich ja haufenweise Parameter abfragen und in entsprechenden Variablen speichern. Ist das so überhaupt realisierbar oder bin ich da auf der falschen Fährte?

Ein Array hat eine fixe Größe, die nicht verändert werden kann. Du willst eine Liste. Die kann man mit Arrays bilden, indem man beim Hinzufügen ein neues (größeres) Array erstellt, das alte kopiert und dann das neue Element anfügt. Das ist letztlich das, was ArrayList macht.

Okay, muss ich mir nochmal genauer anschauen. Also ArrayList ist das Stichwort ;) Danke
 

mihe7

Top Contributor
? Hier wenn ich ein objekt3 zur Laufzeit erzeugen lassen möchte muss ich ja haufenweise Parameter abfragen und in entsprechenden Variablen speichern. Ist das so überhaupt realisierbar oder bin ich da auf der falschen Fährte?
Worauf willst Du hinaus?

Das Array schafft ja nur einmal Platz für die Referenzen. Belegen kannst Du die Felder jederzeit.
 

Wuast

Bekanntes Mitglied
Worauf willst Du hinaus?

Das Array schafft ja nur einmal Platz für die Referenzen. Belegen kannst Du die Felder jederzeit.
Also in meinem Kopf ist folgendes:

Ich starte ein Programm - das läuft dann, bis ich es beende. Das Programm verwaltet Tagesgelder und Depots, die speichere ich in einem Array.
Eröffnet mein Gegenüber nun ein neues Depot, muss ich das ja zur Laufzeit des Programms aufnehmen, sprich ein neues Objekt erzeugen und ein Array-Feld belegen. Zu dem Objekt gehören ja Angaben zu der Perspon, die benötige ich ja auch, um am Ende z.B. einen neuen Saldo anzeigen lassen zu können.

Genauso wie bei primitiven Typen, z. B.:
Java:
array = new Superklasse[]{
    new Tagesgeld("Vorname", "Nachname", 123456, 100.50),
    new Depot("Vorname", "Nachname", 654321, 500.10)
};

also im Code dann

Java:
array = new Superklasse[2]{

   array[0] = new Tagesgeld("Vorname", "Nachname", 123456, 100.50);
oder?

wenn ich jetzt ein array[3] haben möchte, dann erzeuge ich "einfach" ein

Konto depot3 = new Depot[//parameter]. Und um das in den Array zu packen brauche ich eine Kopie vom Array, das mithilfe ArrayList?!

(Soweit mein Verständnis gerade)
 

mihe7

Top Contributor
Nein, nochmal langsam. Ein Array kann eine definierte Anzahl an Elementen gleichen Typs aufnehmen. Bei Referenztypen werden im Array Referenzen gespeichert. Wenn bei der Erzeugung nichts anderes angegeben wurde, ist jedes Element im Array erstmal null.

Wenn Du also weißt: hey, ich möchte maximal 100 Konten haben, kannst Du ein Array mit 100 Elementen erzeugen.
Java:
Konto[] konten; // deklariere konten als Array vom Typ Konto - das Array selbst gibt es noch nicht
konten = new Konto[100]; // erzeuge ein Array für 100 Konten und weise das Array der Variablen konten zu
konten[0] = new Depot(...); // erzeuge ein Objekt vom Typ Depot (das Subtyp von Konto ist) und lege es auf dem ersten Platz im Array ab
konten[1] = new Depot(...); // erzeuge ein Objekt vom Typ Depot (das Subtyp von Konto ist) und lege es auf dem zweiten Platz im Array ab
EDIT: Variablennamen korrigiert.

Ein Array selbst ist nicht dynamisch: es hat genau so viel Platz, wie bei der Erzeugung angegeben wurde. Wenn Du etwas dynamisches willst, kannst Du eine Liste verwenden:
Java:
List<Konto> konten; // deklariere konten als List
konten = new ArrayList<>(); // erzeuge eine neue ArrayList (das ist eine Implementierung von List) und weise diese der Variablen konten zu
konten.add(new Depot(...)); // erzeuge ein Objekt vom Typ Depot und füge es zur Liste konten hinzu
konten.add(depot25); // füge das mit depot25 bezeichnete Objekt zur Liste konten hinzu
 

mihe7

Top Contributor
Noch was: ArrayList verwendet intern ein Array, um die dynamische Datenstruktur "Liste" zu realisieren. Das ist nicht sonderlich schwer.

Hier mal ein Beispiel, wie man eine dynamische Kontenliste implementieren könnte (das sollte man in der Praxis natürlich nicht machen, da man einfach auf ArrayList zurückgreifen kann):
Java:
class Kontenliste {
    private Konto[] konten = new Konto[1]; // Platz für ein Konto wollen wir zu Beginn haben
    private int anzahl; // Anzahl gespeicherter Konten in der Liste, am Anfang 0.

    public void hinzufuegen(Konto konto) {
        sorgeFuerPlatz(anzahl+1);
        konten[anzahl] = konto;
        anzahl++;
    }

    private void sorgeFuerPlatz(int platz) {
        int kapazität = konten.length;
        if (platz <= kapazität) {
            return;
        }

        while (kapazität < platz) {
            kapazität *= 2; // wir verdoppeln die Kapazität so lange, bis sie ausreichend "platz" bietet...
        }

        // Arrays können in der Größe nicht verändert werden, also 
        // legen wir ein neues an und benutzen dann dieses:

        Konto[] neuesArray = new Konto[kapazität];
        System.arraycopy(konten, 0, neuesArray, 0, anzahl); // kopiere bestehende Elemente in neues Array
        konten = neuesArray; // neues Array "übernehmen"
    }
}
 

Wuast

Bekanntes Mitglied
Noch was: ArrayList verwendet intern ein Array, um die dynamische Datenstruktur "Liste" zu realisieren. Das ist nicht sonderlich schwer.

Hier mal ein Beispiel, wie man eine dynamische Kontenliste implementieren könnte (das sollte man in der Praxis natürlich nicht machen, da man einfach auf ArrayList zurückgreifen kann):
Java:
class Kontenliste {
    private Konto[] konten = new Konto[1]; // Platz für ein Konto wollen wir zu Beginn haben
    private int anzahl; // Anzahl gespeicherter Konten in der Liste, am Anfang 0.

    public void hinzufuegen(Konto konto) {
        sorgeFuerPlatz(anzahl+1);
        konten[anzahl] = konto;
        anzahl++;
    }

    private void sorgeFuerPlatz(int platz) {
        int kapazität = konten.length;
        if (platz <= kapazität) {
            return;
        }

        while (kapazität < platz) {
            kapazität *= 2; // wir verdoppeln die Kapazität so lange, bis sie ausreichend "platz" bietet...
        }

        // Arrays können in der Größe nicht verändert werden, also
        // legen wir ein neues an und benutzen dann dieses:

        Konto[] neuesArray = new Konto[kapazität];
        System.arraycopy(konten, 0, neuesArray, 0, anzahl); // kopiere bestehende Elemente in neues Array
        konten = neuesArray; // neues Array "übernehmen"
    }
}
Ich verstehe. Gut erklärt und vielen lieben Dank. Ich schaue aber erstmal, ob ich es mit der Liste hinbekomme :)

Nur eins noch an dieser Stelle: Wie übergebe ich denn dynamisch die Parameter? Sprich die Namen, Nummern und Saldo im Rahmen der Objekterzeugung in der Array-List? Scanner in einer While-Schleife und eine Art "Menüführung", die das Programm bei Bedarf mittels einer bestimmten Eingabe beenden kann?
 

mihe7

Top Contributor
Wie übergebe ich denn dynamisch die Parameter? Sprich die Namen, Nummern und Saldo im Rahmen der Objekterzeugung in der Array-List?
Wie Du die Objekte erstellst, hat doch überhaupt gar nichts damit zu tun, wie Du sie später verwendest (z. B. ob Du sie zu einer Liste hinzufügst oder in ein Array setzt).

Scanner in einer While-Schleife und eine Art "Menüführung", die das Programm bei Bedarf mittels einer bestimmten Eingabe beenden kann?
Das wäre eine Möglichkeit.

Zur Klarstellung: wo die Werte für die Objekte herkommen, kann ich Dir doch nicht sagen :) Das hängt rein davon ab, was Du haben willst. Du kannst sie wie von Dir vorgeschlagen durch Benutzereingaben auf der Konsole ermitteln, Du kannst ein GUI erstellen, in das die Werte eingetragen werden müssen, Du kannst sie aus einer Datei lesen, Du kannst einen Webservice haben, der die Werte übermittelt bekommt, die Daten können aus einer Datenbank stammen usw.

Letztlich liest Du die einzelnen Werte in der Regel erstmal in Variablen ein und erstellst daraus ein Objekt, oder Du hast bereits ein Objekt und setzt dessen Werte auf die eingelesenen. Am Ende hast Du eben ein Objekt und das kannst Du zu einem beliebigen Zeitpunkt zu einer Liste hinzufügen.
 

Wuast

Bekanntes Mitglied
Wie Du die Objekte erstellst, hat doch überhaupt gar nichts damit zu tun, wie Du sie später verwendest (z. B. ob Du sie zu einer Liste hinzufügst oder in ein Array setzt).


Das wäre eine Möglichkeit.

Zur Klarstellung: wo die Werte für die Objekte herkommen, kann ich Dir doch nicht sagen :) Das hängt rein davon ab, was Du haben willst. Du kannst sie wie von Dir vorgeschlagen durch Benutzereingaben auf der Konsole ermitteln, Du kannst ein GUI erstellen, in das die Werte eingetragen werden müssen, Du kannst sie aus einer Datei lesen, Du kannst einen Webservice haben, der die Werte übermittelt bekommt, die Daten können aus einer Datenbank stammen usw.

Letztlich liest Du die einzelnen Werte in der Regel erstmal in Variablen ein und erstellst daraus ein Objekt, oder Du hast bereits ein Objekt und setzt dessen Werte auf die eingelesenen. Am Ende hast Du eben ein Objekt und das kannst Du zu einem beliebigen Zeitpunkt zu einer Liste hinzufügen.
:D

Dachte, es das wäre klar bei der Beschreibung: Ich sitze da rum und eröffne für einen anderen ein Depot. Dann muss ich das Objelt ja erstellen und die entsprechenden Parameter eingeben.
Ich möchte also zu dem Zeitpunkt, an dem ich der Liste ein Kontoobjekt hinzufüge, die dem Objekt auch die Parameter übergeben. Ich wollte daher wissen, ob es da einen "sinnvollsten" Weg gibt (daher z.B. meine Überlegung mit der Schleife). Vllt. noch zur Ergänzung: Ich bin noch auf dem Anfänger-Level, also Konsoleneingabe ist mir Bekannt, aus Dateien lesen, Webservice nutzen oder GUI erstellen ( 😱 ) usw. nicht. Mir kam gar nichts anderes in den Sinn, also die Frage "Wie" meinte eigentlich "Wie über die Konsole" :D
 

Neumi5694

Top Contributor
Die Schleife hat was mit dem UI zu tun. Das sollte dich am Anfang nicht interessieren. Löse das Ganze zuerst mal mit EINEM Eintrag. Wenn du ein GUI verwendest, haben Schleifen dort eh nichts zu suchen, du beendest das Programm per Knopfdruck auf "Beenden", alles läuft über Ereignisse. In einer Text-UI

Du machst es dir nur zu kompliziert, das ist alles. Geh von einfachen Schritten aus, setze im Code 1:1 das um, was du gerade im Text beschrieben hast (außer das mit der Schleife)

1. du brauchst eine Liste (unbestimmte Anzahl, deshalb kein Array) von Bewegungen
2. du brauchst eine Möglichkeit, eine Bewegung mit Parametern zu erstellen
3. du hängst diese Bewegung an die Liste an.

Java:
listeVonBewegungen = new ArrayList<Bewegungen>();


//... Eingabe der Parameter, wie auch immer.
Bewegung neueBewegung = new Bewegung(mit Parametern);
listeVonBewegungen.add(neueBewegung).

Wenn du mit so einem Problem konfrontiert wirst, dann versuche es in kleine Einzelschritte zu zerlegen. Wenn du da an einem guten Punkt bist, dann fang an, diese Einzelschritte umzusetzen, packe am Besten jeden davon in eine eigene Methode mit einem gut lesbaren Namen, die auch ohne dass man die Dokumentation liest, verständlich machen, worum's dabei geht.
Du wirst staunen, wie gut dann dein "Haupt-Code" ausschaut, in welchem du diese Methoden aufrufst.

Falls du mal doch mit einer Schleife in einer Kommandozeilen-UI arbeitest, wäre hier ein Ansatz
[CODE lang="java" title="Schleife"]
boolean eingabeWarGueltig = true;
do {
eingabeWarGueltig = liesDatenEinUndBehandleSie(); //Die Methode hat Zugriff auf die Liste der Bewegungen. Diese wird NICHT dort erstellt, sondern nur befüllt. Als Rückgabewert wird geliefert, ob true: Daten eingegeben wurden, welche in die Liste eingefügt wurden oder false: der Menüpunkt gewählt wurde, die Eingabe abzubrechen
}while (eingabeWarGueltig);
[/CODE]
In deiner Schleife sollte nicht mehr stehen als das. Die Eingabe und Behandlung findet in einer ausgelagerten Methode statt.

Du hast schon ein paar gute Ansätze, verkomplizier das Ganze nur nicht.
 

mihe7

Top Contributor
Ich bin noch auf dem Anfänger-Level, also Konsoleneingabe ist mir Bekannt, aus Dateien lesen, Webservice nutzen oder GUI erstellen ( 😱 ) usw. nicht. Mir kam gar nichts anderes in den Sinn, also die Frage "Wie" meinte eigentlich "Wie über die Konsole"
Alles gut :) Das war nur zur Verdeutlichung, dass das Vorgehen ganz unabhängig davon ist, wo die Werte herkommen.
 

Wuast

Bekanntes Mitglied
Die Schleife hat was mit dem UI zu tun. Das sollte dich am Anfang nicht interessieren. Löse das Ganze zuerst mal mit EINEM Eintrag. Wenn du ein GUI verwendest, haben Schleifen dort eh nichts zu suchen, du beendest das Programm per Knopfdruck auf "Beenden", alles läuft über Ereignisse. In einer Text-UI

Du machst es dir nur zu kompliziert, das ist alles. Geh von einfachen Schritten aus, setze im Code 1:1 das um, was du gerade im Text beschrieben hast (außer das mit der Schleife)

1. du brauchst eine Liste (unbestimmte Anzahl, deshalb kein Array) von Bewegungen
2. du brauchst eine Möglichkeit, eine Bewegung mit Parametern zu erstellen
3. du hängst diese Bewegung an die Liste an.

Java:
listeVonBewegungen = new ArrayList<Bewegungen>();


//... Eingabe der Parameter, wie auch immer.
Bewegung neueBewegung = new Bewegung(mit Parametern);
listeVonBewegungen.add(neueBewegung).

Wenn du mit so einem Problem konfrontiert wirst, dann versuche es in kleine Einzelschritte zu zerlegen. Wenn du da an einem guten Punkt bist, dann fang an, diese Einzelschritte umzusetzen, packe am Besten jeden davon in eine eigene Methode mit einem gut lesbaren Namen, die auch ohne dass man die Dokumentation liest, verständlich machen, worum's dabei geht.
Du wirst staunen, wie gut dann dein "Haupt-Code" ausschaut, in welchem du diese Methoden aufrufst.

Falls du mal doch mit einer Schleife in einer Kommandozeilen-UI arbeitest, wäre hier ein Ansatz
[CODE lang="java" title="Schleife"]
boolean eingabeWarGueltig = true;
do {
eingabeWarGueltig = liesDatenEinUndBehandleSie(); //Die Methode hat Zugriff auf die Liste der Bewegungen. Diese wird NICHT dort erstellt, sondern nur befüllt. Als Rückgabewert wird geliefert, ob true: Daten eingegeben wurden, welche in die Liste eingefügt wurden oder false: der Menüpunkt gewählt wurde, die Eingabe abzubrechen
}while (eingabeWarGueltig);
[/CODE]
In deiner Schleife sollte nicht mehr stehen als das. Die Eingabe und Behandlung findet in einer ausgelagerten Methode statt.

Du hast schon ein paar gute Ansätze, verkomplizier das Ganze nur nicht.
Danke für die umfangreiche Erklärung und die Tipps. Verkomplizieren ist eine meiner zweifelhaften Stärken :D Ich versuch mich am Riemen zu reißen. Gerade dieses Kleinschrittige fällt mir oft schwer.

Alles gut :) Das war nur zur Verdeutlichung, dass das Vorgehen ganz unabhängig davon ist, wo die Werte herkommen.
Hab ich verstanden :) Denke, du weißt wo es noch am meisten hapert. ✌️
 

Neumi5694

Top Contributor
Danke für die umfangreiche Erklärung und die Tipps. Verkomplizieren ist eine meiner zweifelhaften Stärken :D Ich versuch mich am Riemen zu reißen. Gerade dieses Kleinschrittige fällt mir oft schwer.
Das geht den meisten so, aber man lernt auf manchmal kopfschmerzhafte Weise, das doch zu tun :)
Noch eine Kleinigkeit zur Schleife. Man könnte das auch ohne Zusatzvariable lösen, wenn sich's wirklich nur um eine Zeile handelt.
Java:
for(;liesDatenEinUndBehandleSie(););
Das ist aber nicht wirklich leserlich, wenn man nicht vertraut damit ist, was mit "for" alles möglich ist. Lieber zuerst so schreiben, dass man hinterher auch noch versteht, was gemacht wird, auch wenn das heißt, ein paar Variablen mehr zu haben.
 
K

kneitzel

Gast
Da möchte ich auch einmal meinen Senf dazu geben - auch wenn @Neumi5694 das auch schon gesagt hat. Nur um es deutlicher zu machen / mit anderen Worten noch einmal zu sagen:

Also generell ist mein Ratschlag, die for Schleife wirklich nur als reine Zählschleife zu nutzen!

Dieses Konstrukt:
for(;liesDatenEinUndBehandleSie(););
Bietet viel zu viel Komplexität durch eben die "leeren Felder". Und als Entwickler wird man in der Regel genau so ein Konstrukt nicht gewohnt sein.

Und natürlich ist das die typische while Schleife:
while(liesDatenEinUndBehandleSie());
==> for durch while ersetzt und zwei ";" entfernt.

ABER: Bei while ist man gewohnt:
Java:
while (prüfeEtwas()) {
  veraendereEtwas();
}

Das mag unwichtig erscheinen, aber eine Methode sollte nur eine Sache machen. Das wird aber auch manchmal kombiniert aber das ist nicht wirklich im Sinne von Clean Code.

Also so wie @Neumi5694 das vermutlich auch meinte: Spiel damit um die Möglichkeiten zu probieren! Mit Code herum zu spielen und diesen einfach selbst immer etwas um zu stellen ist eine super Sache! Und man lernt die Möglichkeiten von Java besser kennen - und wenn es auch nur bedeutet, dass man lernt, was zwar gehen würde, aber was man selbst für unleserlich und daher für eher unerwünscht hält.

Oberste Priorität (natürlich noch nach "Code muss funktionieren") hat ganz klar die Lesbarkeit des Codes. Daher kann man die Aussage von @Neumi5694 gar nicht oft genug wiederholen:
Lieber zuerst so schreiben, dass man hinterher auch noch versteht, was gemacht wird, auch wenn das heißt, ein paar Variablen mehr zu haben.
 
K

kneitzel

Gast
Stimmt, "while" wäre natürlich schöner :)
Da bin ich selbst auf das "zu kompliziert denken" reingefallen.
Das war aber dennoch ein guter Hinweis. Gerade die for Schleife bietet ja doch enorm viele Möglichkeiten. Daher fand ich auch diesen Hinweis von Dir sehr gut. Und ich sehe da weniger das "zu kompliziert denken" als eher ein "zu früh aufgehört". Man verbessert Code ja Schritt für Schritt und irgendwann zieht man einen Schlussstrich. Und Du hast das ja auch nicht als "Hey, das ist die beste Lösung" verkauft sondern das ja sehr gut kommentiert. (War kurz davor nichts zu schreiben, aber ich wollte halt ein paar Aussagen verstärkt darstellen bzw. Deine Aussage noch unterstreichen. Und auch die While Schleife würde ich so vermutlich nicht schreiben :) )
 

Wuast

Bekanntes Mitglied
public void hinzufuegen(Konto konto) {
sorgeFuerPlatz(anzahl+1);
konten[anzahl] = konto;
anzahl++;
}
Nochmal kurz zum Verständnis, war gerade etwas verwirrt.
Hier hat Mihe ja eine Methode "hinzufuegen" geschrieben und dieser den array konto vom Typ Konto übergeben (richtig?).

Was genau wird denn dann übergeben? Die Anzahl der Felder, deren Inhalte/Referenzen, ... ?
 
K

kneitzel

Gast
Hier hat Mihe ja eine Methode "hinzufuegen" geschrieben und dieser den array konto vom Typ Konto übergeben (richtig?).
Nein, übergeben wurde eine Referenz auf ein Konto, welches eingefügt werden soll.

sorgeFuerPlatz prüft, dass mindestens 1 Platz frei ist.
Dann wird das konto in konten hinzugefügt,

konten und anzahl sind Instanzvariablen. konten ist dabei das Array für die Konten und anzahl ist die Variable, in der die Anzahl der Elemente, die im Array sind, gespeichert wurde. Das Array kann halt größer sein, als Elemente vorhanden sind. Daher brauchst du eine Information, bis wohin Elemente gespeichert wurden.
 

Neumi5694

Top Contributor
Weil man sich den ganzen Schmuh mit der Anzahl der belegten Felder im Normalfall nicht antun will, verwendet man für solche dynamischen Abläufe im Normalfall Listen und keine Arrays.
Arrays sind gut zum Lernen, wie mit Indizes umzugehen ist, aber nach der Lernphase sollten sie ausschließlich für eine fest vorgegebene Anzahl an Werten verwendet werden.
 

Wuast

Bekanntes Mitglied
Nein, übergeben wurde eine Referenz auf ein Konto, welches eingefügt werden soll.

sorgeFuerPlatz prüft, dass mindestens 1 Platz frei ist.
Dann wird das konto in konten hinzugefügt,

konten und anzahl sind Instanzvariablen. konten ist dabei das Array für die Konten und anzahl ist die Variable, in der die Anzahl der Elemente, die im Array sind, gespeichert wurde. Das Array kann halt größer sein, als Elemente vorhanden sind. Daher brauchst du eine Information, bis wohin Elemente gespeichert wurden.
Und diese Info kommt von der Referenz auf das Konto konto, die ich mittels () herstelle ?!
Also bzgl. meiner Frage:
Was genau wird denn dann übergeben? Die Anzahl der Felder, deren Inhalte/Referenzen, ... ?
kann man festhalten: Es wird nicht die Anzahl der Felder (sprich Größe des Arrays) übergeben, sondern die Information darüber in Form von Referenzen? Dann war ich ja garnicht sooooo weit weg :D


aber warum zur Hölle moppert Eclipse bei
Java:
Konto[] konten = new Konto[1];

//so weit, so gut
//aber bei folgendem

Konto[] konten = new Konto[1];
konten[0] = 1; //nur als Bsp.

gibts bei " konten [] konten = new Konto[1]; " eine Fehlermeldung, nämlich Syntax error on token ";", { expected...
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Zeile 1 ist ok. Wenn Zeile 6 zusammen mit Zeile 1 in einem Block (z. B. Methode) steht, gibts einen Fehler, weil konten bereits deklariert wurde. Zeile 7 ist in jedem Fall falsch, weil konten ein Konto-Array ist, also Referenzen auf Objekte vom Typ Konto aufnimmt. Du kannst hier nicht einfach eine Zahl reinschreiben.

Vielleicht liest Du Dir auch nochmal https://www.java-forum.org/thema/von-datentypen-und-mehrdimensionalen-arrays.189506/ durch.
 

Wuast

Bekanntes Mitglied
Zeile 1 ist ok. Wenn Zeile 6 zusammen mit Zeile 1 in einem Block (z. B. Methode) steht, gibts einen Fehler, weil konten bereits deklariert wurde. Zeile 7 ist in jedem Fall falsch, weil konten ein Konto-Array ist, also Referenzen auf Objekte vom Typ Konto aufnimmt. Du kannst hier nicht einfach eine Zahl reinschreiben.

Vielleicht liest Du Dir auch nochmal https://www.java-forum.org/thema/von-datentypen-und-mehrdimensionalen-arrays.189506/ durch.
moment mal.. Zeile 1 habe ich nur kopiert hier ausm Thread. Wenn Zeile 6&7 da stehen, musst du dir Zeile 1 wegdenken. Sowas vernünftig UND komprimiert darzustellen habe ich noch nicht so drauf glaube ich :D

also:
Zeile 6 = Zeile 1 (Zeile 1 in Eclipse = alles okay. Zeile 6 und Zeile 7 (dann OHNE Zeile 1) in Eclipse = Fehlermeldung)
Zeile 7 lt. YT-Video füllt das erste Feld des Arrays (also Position 0) mit dem Wert 1.

deinen Link werde ich mir gelegentlich mal reintun! ist ja doch recht umfangreich

ungeachtet dessen habe ich das gefühl, dass Eclipse gerade nicht mit mir kann. Jetzt soll sogar die Main-Methode record statt void sein... bin ich denn bescheuert??
 

mihe7

Top Contributor
moment mal.. Zeile 1 habe ich nur kopiert hier ausm Thread. Wenn Zeile 6&7 da stehen, musst du dir Zeile 1 wegdenken.
Das dachte ich mir schon, daher habe ich meine Antwort auch nur entsprechend ergänzt. Die Zeile 7 ist unabhängig davon aus den genannten Gründen falsch.

Nochmal:
Zeile 7 lt. YT-Video füllt das erste Feld des Arrays (also Position 0) mit dem Wert 1.
Das ist richtig, funktioniert aber nur, wenn die 1 zuweisungskompatibel zu den Typen der Elemente im Array ist.
Java:
long[] zahlen = new long[10];
zahlen[0] = 1;
funktioniert, weil die 1 ein int-Literal und damit zuweisungskompatibel zum Datentyp long ist.

Java:
Konto[] konten = new Konto[10];
konto[0] = 1;
funktioniert nicht, weil 1 ein int-Literal und damit nicht zuweisungskompatibel zum Datentyp Konto ist. Eine 1 ist kein Konto, Du bräuchtest etwas wie
Java:
Konto[] konten = new Konto[10];
konto[0] = new Konto(1);
 

Wuast

Bekanntes Mitglied
Das ist richtig, funktioniert aber nur, wenn die 1 zuweisungskompatibel zu den Typen der Elemente im Array ist.
Ich glaube da sind wir bei deinem Link ;) Habe ihn mal grob überflogen. Saubere Arbeit übrigens, du solltest ein Buch schreiben! Sehr gut erklärt, besser als die Literatur, die mir bisher untergekommen ist.

Konto[] konten = new Konto[10];
konto[0] = new Konto(1);
[/code]
Klingt dann plausibel, muss ich aber nochmal nachvollziehen. Ich denke aber, das kriege ich hin. Wenn nicht melde ich mich nochmal :p
 

Neumi5694

Top Contributor
wie meinst du das?

Und wie kriege ich das wieder weg?? Warum will "es" plötzlich keine void mehr haben in den Methoden? Betrifft auch andere, überall heißt es "record expected"
Vereinfache zuerst mal deine Klasse. Nimm mal alles raus, was nicht unbedingt rein muss (mach von mir aus vorher eine Sicherheitskopie und nimm alles raus). VIelleicht hast du nur irgendwo eine überflüssige oder fehlende Klammer. Ich verwend auch kein Eclipse, aber das ist im Normalfall die Fehlerursache, wenn solche völlig abwegigen Meldungen kommen. Was auch nicht gern gesehen wird, ist ein "private" innerhalb einer Methode.
Mein Schuss ins Blaue ist, dass du die Methode außerhalb der Klasse definieren hast oder dass die vorige Methode keine schließende Klammer hat.
 

Wuast

Bekanntes Mitglied
Vereinfache zuerst mal deine Klasse. Nimm mal alles raus, was nicht unbedingt rein muss (mach von mir aus vorher eine Sicherheitskopie und nimm alles raus). VIelleicht hast du nur irgendwo eine überflüssige oder fehlende Klammer. Ich verwend auch kein Eclipse, aber das ist im Normalfall die Fehlerursache, wenn solche völlig abwegigen Meldungen kommen. Was auch nicht gern gesehen wird, ist ein "private" innerhalb einer Methode.
Mein Schuss ins Blaue ist, dass du die Methode außerhalb der Klasse definieren hast oder dass die vorige Methode keine schließende Klammer hat.
Sorry für die späte Reaktion, ich war "leider" im Urlaub :D

Es ist tatsächlich alles richtig in den Klammern. Wie gesagt, sobald ich die Array-Felder auskommentiere, ist Eclipse mit der Syntax zufrieden. Alle Klammern passen. Tja.. Mein Name ist irgendwie Programm...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Anzahl der Elemente key in einem Array mit log(N) Laufzeit Java Basics - Anfänger-Themen 4
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
A Elemente in einem Array Java Basics - Anfänger-Themen 5
A Vorkommende Farben ermittel und als Array zurückgeben Java Basics - Anfänger-Themen 7
AhmadSlack Array Java Basics - Anfänger-Themen 7
Jambolo Kartenhand Array Java Basics - Anfänger-Themen 14
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
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
EykS 3D Druckdatei basierend auf 3D Array? Java Basics - Anfänger-Themen 3
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
Chris.089 2 Werte im Array tauschen Java Basics - Anfänger-Themen 6
D EinMalEins mithilfe einer for-Schleife und Array Java Basics - Anfänger-Themen 1
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
L Gridmuster in einem Array Java Basics - Anfänger-Themen 2
sgtcoopa Array übergeben Schleife Java Basics - Anfänger-Themen 0
B Compiler-Fehler Array aus Objekten übergeben Java Basics - Anfänger-Themen 7
padde479 Array Multiplikation der ersten n Zahlen Java Basics - Anfänger-Themen 7
G zweidimensionales int Array sortieren Java Basics - Anfänger-Themen 57

Ähnliche Java Themen

Neue Themen


Oben