Zugriff auf Arraylist

Mathis

Mitglied
Hallo,
Ich habe eine Arraylist von Konti, auf die ich nun von der Konsole aus zugreifen möchte. Ich sollte die Datenfelder aufrufen können (Kontostand...) und bearbeiten können (Einzahlung...). Jedes Konto hat eine ID-Nummer, mit der es identifiziert werden kann.

Java:
System.out.println(Kontoliste.get(idNummerTemporaer).getKontostand);

Wenn ich nun versuche, den Kontostand eines Kontos aufzurufen kommt eine Fehlermeldung

Hier der ganze Code:

Java:
public class Konto
{
    private String name; 
    private int idNummer;
    private int kontostand;
    
    public Konto(String name, int idNummer)
    {
        this.name = name;
        this.idNummer = idNummer;
        kontostand = 0;
    }

  public void einzahlen(int betrag)
    {
        setKontostand(kontostand + betrag);
    }

public class Kontoverwaltung
{ 
    public static void main(String[] args)
    {

        ArrayList<Konto> Kontoliste = new ArrayList<Konto>();
        int nummer;
    
do

		{
		    
System.out.println("Bitte wählen Sie eine Option");
System.out.println("Neues Konto eröffnen: 1");
System.out.println("Kontostand ausgeben: 2");
System.out.println("Betrag einzahlen: 3");
System.out.println("Beenden: 4");

    Console console = System.console();
    String eingabe = console.readLine("Eingabenummer: ");
    nummer = Integer.parseInt(eingabe); // Eingabe in Zahl umwandeln
    switch (nummer)
    {
        case 1:  
            String vorname = console.readLine("Name des Kontoinhaberes: ");

            int idNummer = Kontoliste.size() + 1;
            Konto kontoTemporaer = new Konto(name, idNummer);
            System.out.println("Dem Konto wurde folgende idNummer zugewiesen: " + kontoTemporaer.getIdNummer());
            Kontoliste.add(new Konto(name, nidNummer));
            System.out.println("Anzahl Konti in Kontoliste: " + Kontoliste.size());
            break;
        case 2:  
            String eingabe1 = console.readLine("Konto-ID-Nummer eingeben: ");
            int idNummer1 = Integer.parseInt(eingabe1);
            System.out.println(Kontoliste.get(idNummer1).getKontostand());
            break;
        case 3:  
            String eingabe2 = console.readLine("Konto-ID-Nummer eingeben: ");
            int idNummer2 = Integer.parseInt(eingabe2);
            String eingabe3 = console.readLine("Betrag eingeben: ");
            int betrag1 = Integer.parseInt(eingabe3);
            System.out.println(Kontoliste.get(idNummer2).einzahlen(betrag1));
            break;
        
    }
} while (nummer <4);
}
}

Tausend Dank im Voraus, wenn mir jemand einen Tipp geben könnte!
 
Java:
System.out.println(Kontoliste.get(idNummer1).getKontostand());
Die idNummer ist nicht gleich der Position in der ArrayList. Nimm entweder eine HashMap und verwende die idNummer als Key oder such nach der idNummer in der ArrayList
Java:
for(Konto konto: Kontoliste) {
    if(konto.getIdNummer() == idNummer) System.out.println(konto.getKontostand());
}
 
Ändere mal die Zeile
Java:
int idNummer = Kontoliste.size() + 1;
in
Java:
int idNummer = Kontoliste.size();

Wenn eine Liste 8 Elemente enthält bedeutet das, dass die Elemente sich an der Stelle
0 1 2 3 4 5 6 7
befinden.
Es wird von 0 aus gezählt, der 8e Eintrag einer ArrayList steht also an der 7 stelle.
 
Vielen Dank, DrZoidberg. Ich habe den Code übernommen und es scheint zu funktionieren. Das Problem ist jetzt, dass nun der Kontostand von allen Konten ausgegeben wird, nicht nur für das definierte Konto...
 
Fehler entdeckt im Code:

- Fehler erkennen:
Alle Konten werden in der for-Schleife ausgegeben
- Fehlerquelle suchen:
Der Kontrollmechanismus ("if()") in der for-Schleife sollte dafür sorgen dass der Fehler nicht auftritt. Er scheint zu versagen.
- Fehler provozieren:
Der Fehler tritt auf wenn die Konten alle die selbe ID haben, nur so versagt der Kontrollmechanismus
- Fehler beseitigen:
Logischenfehlerort finden (ID Zuweisung an die Konten(Existiert sie überhaupt noch?)) und umschreiben, dass sie funktioniert.

Mit anderen Worten:
All deine Konten haben die selbe ID. Da scheint was schiefgelaufen zu sein.

Gruß
Net
 
Hallo Mathis

ich würde dir vielleicht empfehlen, je nach dem wie weit du dich auskennst, dass Problem mit Listen zu lösen.
Du kannst mit dem Konstruktor dann eine neue Liste erzeugen und mit der add()-Funktion neue Konten hinzufügen. Ist wesentlich angenehmer zu nutzen als ein Array, da du jedes Konto als ein Element anlegst und nicht immer den kompletten Array durchlaufen musst, da du sie mit Vorgänger und Nachfolger verketten kannst.

Über Funktionen wie getContent() und setContent kannst du dir dann die Kontodaten ausgeben lassen bzw. ändern.

Momentan habe ich zu Hause kein Internet aber falls du mehr erfahren möchtest kann ich dir gerne Infos, Codebeispiele etc. zukommen lassen 😉

Gruß Jules
 

Zurück
Oben