Auf ArrayList mit get zugreifen

dragonir96

Mitglied
Hallo Leute,

ich lerne nun seit 2 Monaten Java und die Basics hab ich einigermaßen drauf. Im Moment will ich alles festigen in dem ich ein Übungsprojekt starte.
Hierzu brauche ich ein Login System. Wie ich es Aufbau weiß ich schon ( Vergleiche der Objektvariablen einer ArrayList) Das Problem ist nun das ich die ArrayList zwar erstellen kann, das Programm sich aber nicht ausführen lässt. Es markiert dann immer die Zeile wo ich die get Methode aufruf könnt ihr mir sagen was ich falsch mach? ( In dem Beispiel markiert es nicht mal das Aufrufen -Print- funktioniert einfach nicht, wenn ich den Aufruf in einer eigenen Methode starte dann kommt nur die markieren bedeutet aber vermutlich das selbe? )

Hier mal der Code ich hoffe ihr könnt dann mein Problem nachvollziehen - Ich habe mir eine Benutzereingabe gebaut wo der Nutzer seine Daten eingeben kann (nname, vname, plz ...):
Code:
JButton create = new JButton ("Registrieren"); // neuer Benutzer wird erstellt
        create.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e) {
          String eins = vname.getText();
          if (eins == null)
          {eins = " ";}
          String zwei = nname.getText(); // Eingaben werden zwischengespeichert
          String drei = plz.getText();
          String vier = ort.getText();
          String fünf = straße.getText();
          String sechs = hnr.getText();
          String sieben = telefon.getText();
          String acht = mail.getText();
          String neun = passwort.getText();
     
          Kunde neu = new Kunde(eins, zwei, drei, vier, fünf, sechs, sieben, acht, neun); // Objekt wird erstellt
          kunden.add(neu); // Objekt wird ArrayList zugeteilt
          System.out.println(((Kunde)kunden.get(0)).gibVorname()); //hier tritt das Problem auf
          anzahl = anzahl +1; // ist für for Schleife gedacht
     
     

      }
    });

hier die Initalisierung des Arrays ( alles weitere hab ich weggelassen) - Initialisierung erfolgt im Konstruktor und die Befüllung in einen Container- Button - Action Listener
Code:
public class Log extends JFrame // klassenname
{   private static final int PREFERRED_WIDTH = 400;
    private static final int PREFERRED_HEIGHT = 650;
    private static final Dimension PREFERRED_SIZE =
                            new Dimension(PREFERRED_WIDTH,PREFERRED_HEIGHT);
                            public static ArrayList <Kunde> kunden; // Array angeben
    JLabel login;
    Container contentPane;
    int anzahl;
    public Log() // Konstruktor
    {setTitle("MyTimetable");
     ArrayList <Kunde> kunden = new ArrayList<Kunde>(); // initalisierung des Arrays
     anzahl = 0; // für for-schleife
:

falls ihr den ganzen Code braucht bitte schreiben ich wollte euch aber ersparen meinen ganzen Saustall durchlesen zu müssen. Hab ich falsch initialisiert oder den getter falsch verwendet? Oder hat das hinzufügen des Objekts nicht geklappt und das Array ist leer?(hab schon mehrere Methoden probiert)
Danke schonmal für eure Mühe! 🙂
 
Zuletzt bearbeitet:
Selbes Problem bei anderer Aufgabe - ist vielleicht übersichtlicher zu lesen
Java:
import java.util.ArrayList;
/**
* Beschreiben Sie hier die Klasse Geschäft.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Geschäft
{
   public String name;
   public String ort;
   public int plz;
   public String straße;
   public int nummer;
   public int telefon;
   public String mail;
   public String inhaber;
   public static ArrayList <Option> optionen; // ArrayList angeben
  
   public Geschäft()
   {ArrayList<Option> optionen = new ArrayList<Option>(); // ArrayList initialisieren
    }
   public void optionen()
   {Option eins = new Option("5min schneiden", "kurz", "5min", "5€");
    System.out.println(eins.komplett());
    optionen.add(eins); // wird markiert - wieso?
    String zwei = optionen.get(0).komplett(); // string zum ausgeben erzeugen
    System.out.println(zwei); //ausgeben
    }
   
}
 
Bei mir geht's.

Java:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

// klassenname
public class Log extends JFrame {
    private static final int PREFERRED_WIDTH = 400;
    private static final int PREFERRED_HEIGHT = 650;
    private static final Dimension PREFERRED_SIZE = new Dimension(PREFERRED_WIDTH, PREFERRED_HEIGHT);
    public static ArrayList<Kunde> kunden; // Array angeben
    JLabel login;
    Container contentPane = new Container();
    int anzahl;

    JTextField vname = new JTextField("Vorname");
    JTextField nname = new JTextField("Nachname");
    JTextField plz = new JTextField("PLZ");
    JTextField ort = new JTextField("Ort");
    JTextField straße = new JTextField("Straße");
    JTextField hnr = new JTextField("Hausnummer");
    JTextField telefon = new JTextField("Telefonnummer");
    JTextField mail = new JTextField("E-Mail-Adresse");
    JTextField passwort = new JTextField("Passwort");

    public JButton create = new JButton("Registrieren"); // neuer Benutzer wird erstellt

    // Konstruktor
    public Log() {
        setTitle("MyTimetable");

        setSize(PREFERRED_SIZE);

        this.setContentPane(contentPane);

        contentPane.setLayout(new FlowLayout());

        contentPane.add(create);
        contentPane.add(vname);
        contentPane.add(nname);
        contentPane.add(plz);
        contentPane.add(ort);
        contentPane.add(straße);
        contentPane.add(hnr);
        contentPane.add(telefon);
        contentPane.add(mail);
        contentPane.add(passwort);

        this.setVisible(true);
        this.repaint();
        this.revalidate();

        ArrayList<Kunde> kunden = new ArrayList<Kunde>(); // initalisierung des Arrays
        anzahl = 0; // für for-schleife

        create.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String eins = vname.getText();
                if (eins == null) {
                    eins = " ";
                }
                String zwei = nname.getText(); // Eingaben werden zwischengespeichert
                String drei = plz.getText();
                String vier = ort.getText();
                String fünf = straße.getText();
                String sechs = hnr.getText();
                String sieben = telefon.getText();
                String acht = mail.getText();
                String neun = passwort.getText();

                Kunde neu = new Kunde(eins, zwei, drei, vier, fünf, sechs, sieben, acht, neun); // Objekt wird erstellt
                kunden.add(neu); // Objekt wird ArrayList zugeteilt
                System.out.println(((Kunde) kunden.get(0)).gibVorname()); // hier tritt das Problem auf
                anzahl = anzahl + 1; // ist für for Schleife gedacht
            }
        });

    }

    public static void main(String[] args) {
        new Log();
    }
}

class Kunde {

    private String eins;

    public Kunde(String eins, String zwei, String drei, String vier, String fünf, String sechs, String sieben,
            String acht, String neun) {

        this.eins = eins;
    }

    public String gibVorname() {
        return eins;
    }

}
 
Statt
Java:
public static ArrayList <Option> optionen; // ArrayList angeben

public Geschäft() {
    ArrayList<Option> optionen = new ArrayList<Option>(); // ArrayList initialisieren
}

solltest du schreiben:

Java:
public ArrayList <Option> optionen; // kein static

public Geschäft() {
    optionen = new ArrayList<Option>(); // kein ArrayList<Option>
}
 
weil ich ihn nirgends gepostet hab und es mein Code ist 😀

aber ist egal dann lassen wir das einfach mal stehen, danke für die schnellen antworten 🙂
 

Zurück
Oben