Erste Schritte füllen Attribute java Klasse in for Schleife und Array

web.rie.je

Mitglied
Guten Tag,

ich beschäftige mich seit ein paar Wochen mit Java und mache hier meine ersten Erfahrungen mit online Tutorials und Beispielaufgaben.
Man möge es mir nachsehen, wenn ich hier nicht die richtigen Begriffe benutze.
Ich benutze Windows 10 und habe Eclipse Mars 2 installiert. Mein Java Version ist 1.8.0_73.

Ich habe eine Übungsaufgabe erstellt und versuche über 2 Klassen Adressen in einer for-Schleife einzugeben.

Die Klassen sehen folgendermassen aus:
Java:
public class AdressBuch {

   String vorname;
   String nachname;
   int alter;
  
   void addrSetup(String vname, String nname, int alt){
     vorname = vname;
     nachname = nname;
     alter = alt;
   }
}
Wenn ich jetzt eine Main Klasse schreibe dann kann ich folgendermassen die Attribute so füllen:
Java:
AdressBuch secondAdresse = new AdressBuch();
     secondAdresse.addrSetup("Max", "Mustermann", 42);
Wenn ich aber versuche, dieses als Array zu benutzen und so anlege (für 2 Adressen):
Java:
AdressBuch alleAdressen[] = new AdressBuch[2];
kann ich die Array Länge zwar richtig abfragen:
Java:
alleAdressen.length
aber leider kann ich nicht mal die erste Adresse eingeben für das Attribut vorname:
(import java.util.Scanner und Scanner scan = new Scanner(System.in) habe ich gemacht)
Java:
for(int i = 0; i < alleAdressen.length; i++){
       System.out.println("Eingabe Adresse " + (i+1));
      
       System.out.println("Vorname:");
       String vname = scan.nextLine();
       alleAdressen[i].vorname = vname;
auch der Aufruf der Methode:
Java:
addrSetup(String vname, String nname, int alt)
gelingt hier nicht. Habe das Gefühl, das ich das Array falsch benutze.
Code:
Fehlermeldung:
Exception in thread "main" java.lang.NullPointerException
   at MainAddresses.main(MainAddresses.java:28)
Wer kann helfen?
Danke.
 
Zuletzt bearbeitet von einem Moderator:

Meniskusschaden

Top Contributor
Leider hast du deinen Code nicht in Code-Tags gesetzt, deshalb ist er hier schlecht lesbar. Vermutlich sind dadurch auch die eckigen Klammern verloren gegangen und du hast nicht
Java:
alleAdressen.vorname = vname;
sondern
Java:
alleAdressen[i].vorname = vname;
geschrieben. Du versuchst hier für ein Objekt vom Typ Adressbuch das Attribut vorname zu setzen. Du hast aber noch gar kein Adressbuch-Objekt dafür erstellt.
 

web.rie.je

Mitglied
Hallo,

vielen Dank für die schnelle Antwort. Leider habe ich keine Ahnung, wie ich meinen quellcode in code-tags setze, bekomme ich aber noch irgendwie hin. Ich setze ihn erst noch mal in spitze Klammern.

Also, hier mal der koplette Quellcode der beiden Klassen die ich verwende:

Klasse AdressBuch:
Java:
public class AdressBuch {

   String vorname;
   String nachname;
   int alter;
  
   void addrSetup(String vname, String nname, int alt){
     vorname = vname;
     nachname = nname;
     alter = alt;
   }
}
Klasse MainAddresses:
Java:
import java.util.Scanner;

public class MainAddresses {

   public static void main(String[] args) {
     Scanner scan = new Scanner(System.in);
    
     System.out.println("ADDRESSVERWALTUNG");
    
     /*AdressBuch firstAdresse = new AdressBuch();
     firstAdresse.addrSetup("Peter", "Lustig", 48);
    
     System.out.println(firstAdresse.alter);
    
     AdressBuch secondAdresse = new AdressBuch();
     secondAdresse.addrSetup("Max", "Mustermann", 0);
    
     System.out.println(secondAdresse.nachname);
     */
    
     AdressBuch alleAdressen[] = new AdressBuch[2];
     System.out.println(alleAdressen.length);
     for(int i = 0; i < alleAdressen.length; i++){
       System.out.println("Eingabe Adresse " + (i+1));
      
       System.out.println("Vorname:");
       String vname = scan.nextLine();
       alleAdressen[i].vorname = vname;
       
       System.out.println("Nachname:");
       String nname = scan.nextLine();
       alleAdressen[i].nachname = nname;
       
       System.out.println("Alter:");
       int alt = scan.nextInt();
       alleAdressen[i].alter = alt;
     }
   }
}
Ich dachte, dass ich mit der Zeile:
Java:
AdressBuch alleAdressen[] = new AdressBuch[2];
das Objekt Adressbuch für 2 Adressen erstelle?

Fehlermeldung bleibt die gleiche.
Danke für die Hilfe.

Gruss
 
Zuletzt bearbeitet von einem Moderator:

web.rie.je

Mitglied
Java:
public class AdressBuch {

    String vorname;
    String nachname;
    int alter;
   
    void addrSetup(String vname, String nname, int alt){
        vorname = vname;
        nachname = nname;
        alter = alt;
       
    }
   
}
 

web.rie.je

Mitglied
Java:
import java.util.Scanner;

public class MainAddresses {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
      
        System.out.println("ADDRESSVERWALTUNG");
      
        /*AdressBuch firstAdresse = new AdressBuch();
        firstAdresse.addrSetup("Peter", "Lustig", 48);
      
        System.out.println(firstAdresse.alter);
      
        AdressBuch secondAdresse = new AdressBuch();
        secondAdresse.addrSetup("Max", "Mustermann", 0);
      
        System.out.println(secondAdresse.nachname);
        */
      
        AdressBuch alleAdressen[] = new AdressBuch[2];
        System.out.println(alleAdressen.length);
        for(int i = 0; i < alleAdressen.length; i++){
            System.out.println("Eingabe Adresse " + (i+1));
          
            System.out.println("Vorname:");
            String vname = scan.nextLine();
            alleAdressen[i].vorname = vname;
          
            System.out.println("Nachname:");
            String nname = scan.nextLine();
            alleAdressen[i].nachname = nname;
          
            System.out.println("Alter:");
            int alt = scan.nextInt();
            alleAdressen[i].alter = alt;
                   }
           }
   }
 
Zuletzt bearbeitet von einem Moderator:

Meniskusschaden

Top Contributor
vielen Dank für die schnelle Antwort. Leider habe ich keine Ahnung, wie ich meinen quellcode in code-tags setze, bekomme ich aber noch irgendwie hin. Ich setze ihn erst noch mal in spitze Klammern.
Du kannst den Code auch über das Symbol links vom Diskettensymbol einfügen.
Ich dachte, dass ich mit der Zeile:
AdressBuch alleAdressen[] = new AdressBuch[2];
das Objekt Adressbuch für 2 Adressen erstelle?
Damit erstellst du nur ein Array, in dem du zwei Adressbuch-Objekte speichern kannst. Das Array ist zunächst aber leer und du mußt die beiden Adressbuch-Objekte mit new erstellen. Z.B. so:
Java:
alleAdressen[i] = new AdressBuch();
 

web.rie.je

Mitglied
Hallo,

danke für die schnelle Hilfe. Ich habe den code jetzt so abgeändert:

Java:
import java.util.Scanner;

public class MainAddresses {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String vname;
        String nname;
        int alt;
       
        System.out.println("ADDRESSVERWALTUNG");
       
        /*AdressBuch firstAdresse = new AdressBuch();
        firstAdresse.addrSetup("Peter", "Lustig", 48);
       
        System.out.println(firstAdresse.alter);
       
        AdressBuch secondAdresse = new AdressBuch();
        secondAdresse.addrSetup("Max", "Mustermann", 21);
       
        System.out.println(secondAdresse.nachname);
        */
       
        AdressBuch alleAdressen[] = new AdressBuch[3];
        // System.out.println(alleAdressen.length);
       
        for(int i = 0; i < alleAdressen.length; i++){
            System.out.println("\nAdresse " + (i+1) + ": ok");
           
            alleAdressen[i] = new AdressBuch();
           
            if(i == 0){
                vname = "Peter";
                nname = "Lustig";
                alt = 48;
            } else if(i == 1){
                vname = "Max";
                nname = "Mustermann";
                alt = 31;
            } else {
                vname = "Grete";
                nname = "Müller";
                alt = 91;
            }
           
            System.out.println(vname);
            alleAdressen[i].addrSetup(vname, nname, alt);
                       
            /*System.out.println("Vorname:");
            String vname = scan.nextLine();
            alleAdressen[i].vorname = vname;
           
            System.out.println("Nachname:");
            String nname = scan.nextLine();
            alleAdressen[i].nachname = nname;
           
            System.out.println("Alter:");
            int alt = scan.nextInt();
            alleAdressen[i].alter = alt;*/
           
        }
       
    }
   
}

Läuft jetzt fehlerfrei durch.

Kommentare erwünscht!

Gruss
 
X

Xyz1

Gast
Zunächst dachte ich, ist ja gar keine Datenstruktur wegen dem if-else. Dann hab ich gesehen, ich doch eine Datenstruktur. Also vielleicht die Klassen anders benennen. Und dann das if-else auflösen.
 

Meniskusschaden

Top Contributor
Kommentare erwünscht!
Ich würde auch die Benennung überarbeiten. Insbesondere ist Adressbuch kein guter Name für eine Klasse, die eine Einzeladresse abbildet. Dann würde ich eine Liste anstelle eines Arrays verwenden, beispielsweise eine ArrayList. Hauptvorteil ist, dass man sich nicht auf eine Grösse festlegen muss und somit beliebig viele Objekte darin speichern kann. Außerdem gibt es nützliche Methoden wie beispielsweise add, um Objekte bequem hinzuzufügen, ohne dass man mit einem Index herum hantieren muss.
 

Joose

Top Contributor
Kommentare erwünscht!

Kleiner Tipp für deine Methode "addrSetup":
Verwende das Keyword "this" dann ersparst du dir die Abkürzungen bei den Parametern.

Java:
public class AdressBuch {
    String vorname;
    String nachname;
    int alter;
  
    void addrSetup(String vorname, String nachname, int alter){
        this.vorname = vorname;
        this.nachname = nachname;
        this.alter = alter;      
    }  
}
Mit "this" wird das aktuelle Objekt angesprochen, damit kannst du zwischen Instanzattributen und lokalen Variablen bzw. Parametern unterscheiden auch wenn deren Name gleich ist.

Und falls du Java mit Hilfe eines Buches, Videos oder Internet Beispiels lernst möchte ich nur das Stichwort "Konstruktor" angeben. Falls du diesen schon durchgenommen hast, wäre dies die besser Variante um die Attribute des Objektes zu initialisieren.
 

web.rie.je

Mitglied
Hallo,

vielen Dank für die Tips. Habe versucht, sie in anderen Übungen umzusetzen.
Habe auch ein paar Übungen mit der ArrayList gemacht.

Wollte dann die eigentlich Übung mit einer ArrayList lösen. Also wieder eine Klasse erstellt AdressBuch.java, wie gehabt.

Java:
public class AdressBuch {

    String vorname;
    String nachname;
    int alter;
   
    void addrSetup(String vorname, String nachname, int alter){
        this.vorname = vorname;
        this.nachname = nachname;
        this.alter = alter;
   
    }
   
}

Dann versuche ich über ArrayList ein array für die Adressen zu erstellen. Ich möchte wie zuvor die Attribute vorname, nachname und alter nutzen.
Ich denke, ich muss also wieder in dem array die Adressbuch Objekte erstellen, um vorname etc. zu füllen. Irgendwie gelingt mir das aber nicht.

Java:
import java.util.ArrayList;
import java.util.List;

public class MainAdresses {

    public static void main(String[] args) {
       
        System.out.println("ADRESSENVERWALTUNG\n");
       
        // das hier funktioniert
        AdressBuch firstaddress = new AdressBuch();
        firstaddress.nachname = "Meyer";
       
        // das hier funktioniert leider nicht
        List<AdressBuch> addressarray = new ArrayList<AdressBuch>();
       
        addressarray.add(0, element);
       
    }
   
}

Wo ist der Fehler?

Danke!
Gruss
 

Kababär

Top Contributor
Du musst statt (0, element) natürlich firstadress zu der Liste hinzufügen.
Deine Liste hat den Typ "AdressBuch", also wird auch ein Element dieses Typs erwartet.

Was ich noch ändern würde:
Statt in der Klasse AdressBuch eine Methode zum initialisieren der Werte zu schreiben, würde ich einfach den Konstruktor dafür verwenden.
 
K

kneitzel

Gast
Auch die Namen solltest du überdenken. Dein AddressBuch speichert ja kein Adressbuch. Das macht Deinen Code sehr verwirrend.
 

Kababär

Top Contributor
Würde ich auch ändern. Statt AdressBuch nur Adresse und die Liste Adressbuch taufen.
So verstehst du auch den Code schneller, wenn du dir den in 5 Jahren nochmal anguckst.

MfG
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Area mit Teil-Image füllen Java Basics - Anfänger-Themen 0
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
emx-zee Erste Schritte NullPointerException, Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 2
Poppigescorn String mit mehreren Wörtern füllen? Java Basics - Anfänger-Themen 4
sashady 2D-Array mit Zahlenmuster füllen Java Basics - Anfänger-Themen 4
J Ist es möglich einen int Array wirklich leer zu initialisieren oder zu füllen? Java Basics - Anfänger-Themen 21
java3690 Java- liste füllen ud die werte addieren Java Basics - Anfänger-Themen 13
Z Char Array an zufälligen stellen mit einem "x" füllen. Java Basics - Anfänger-Themen 4
java3690 Liste mit zufälligen zahlen füllen Java Basics - Anfänger-Themen 27
T Array füllen Java Basics - Anfänger-Themen 11
B Objekt von EJB in Controller (CDI) - Klasse füllen? Java Basics - Anfänger-Themen 3
J Combobox füllen mit Wertausgabe von andere Klasse Java Basics - Anfänger-Themen 3
A Array richtig füllen Java Basics - Anfänger-Themen 2
krgewb Array später füllen Java Basics - Anfänger-Themen 1
E Arrays nach best Muster füllen Java Basics - Anfänger-Themen 4
A Ein Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 4
M jTabel mit Daten Füllen Java Basics - Anfänger-Themen 5
neerual Feld mit Einsen und Nullen füllen und überschreiben Java Basics - Anfänger-Themen 1
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
B Array via Schleife mit ungeraden bzw geraden Zahlen füllen Java Basics - Anfänger-Themen 7
G Model mit Models füllen Java Basics - Anfänger-Themen 9
T Best Practice Liste geschickt füllen Java Basics - Anfänger-Themen 5
Bluedaishi Datum in Jtextarea füllen Java Basics - Anfänger-Themen 5
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
D Best Practice Objekt automatisch im Konstruktor füllen? Java Basics - Anfänger-Themen 9
L Feld mit beliebiger Anzahl von Buchstaben füllen... Java Basics - Anfänger-Themen 5
A Methoden Array mit Methode nacheinander füllen Java Basics - Anfänger-Themen 3
T Arrays mit Schleife füllen Java Basics - Anfänger-Themen 11
D JComboboxen in Abhängigkeiten füllen Java Basics - Anfänger-Themen 7
K Array mit for-each Schleife füllen Java Basics - Anfänger-Themen 5
Z Array-Index einmalig je mit Random füllen Java Basics - Anfänger-Themen 7
K "Elegantes" Füllen eines Models? Java Basics - Anfänger-Themen 20
W String in einer Zeile mit Alphabet füllen? Java Basics - Anfänger-Themen 8
K String Array basierend auf int Array füllen Java Basics - Anfänger-Themen 2
Y Erste Schritte Spielfeld, Array füllen mit Treffern...?! Java Basics - Anfänger-Themen 3
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
N Arrays mit Zufallzahlen füllen und Statistiken berechnen Java Basics - Anfänger-Themen 5
K Zweidimensionales Array erstellen und zufällig mit 0 und 1 füllen Java Basics - Anfänger-Themen 11
P zweidimensionales Array anlegen und mit DB-Daten füllen Java Basics - Anfänger-Themen 14
L Subklasse von ArrayList nur mit bestimmten Objekten füllen Java Basics - Anfänger-Themen 1
B Methoden Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 4
B Methoden 2D Arrays füllen Java Basics - Anfänger-Themen 3
C zwei dimensionales array mit "1 " füllen Java Basics - Anfänger-Themen 8
H zweidimensionales array füllen Java Basics - Anfänger-Themen 6
JG12111989 2D Array mit Array[] füllen Java Basics - Anfänger-Themen 21
J Array mit Zahlen füllen Java Basics - Anfänger-Themen 28
S JTable dynamisch mit Datenbankinhalten füllen Java Basics - Anfänger-Themen 6
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
T Progressbar füllen? Java Basics - Anfänger-Themen 3
V Methoden Matrix als 1D Array mit Werten füllen Java Basics - Anfänger-Themen 12
R ActionListener mit for Schleife füllen. Java Basics - Anfänger-Themen 4
S JComboBox automatisch füllen Java Basics - Anfänger-Themen 3
L OOP Grafik in Circle Objekt füllen Java Basics - Anfänger-Themen 3
B Array erstellen,ausgeben,mit zufallszahlen füllen aber wie ? Java Basics - Anfänger-Themen 1
B Collections ArrayList füllen - Anfängerfrage Java Basics - Anfänger-Themen 1
M OOP Liste füllen mit Strings Java Basics - Anfänger-Themen 9
S Mehrdimensionales Array füllen Java Basics - Anfänger-Themen 1
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
P Ein Array mit der Eingaber der User füllen und ausgeben Java Basics - Anfänger-Themen 6
S Textdatei einlesen und JFrame füllen Java Basics - Anfänger-Themen 14
S JTabel korrekt mit Datensätzen aus ResultSet füllen Java Basics - Anfänger-Themen 4
I String mit Nullen füllen Java Basics - Anfänger-Themen 4
C JTextField füllen Java Basics - Anfänger-Themen 5
M Kann einen Array nicht füllen, im Nachhinein nur "null"-Werte Java Basics - Anfänger-Themen 11
M char Array füllen Java Basics - Anfänger-Themen 2
X JTable mit Inhalten aus JTextField o.ä. füllen Java Basics - Anfänger-Themen 4
A List mit integern füllen Java Basics - Anfänger-Themen 4
L String array mit split füllen Java Basics - Anfänger-Themen 14
Spin Blatt mit Bildern füllen Java Basics - Anfänger-Themen 5
S externe Webseiten füllen Java Basics - Anfänger-Themen 5
1 Erste Schritte Progressbar füllen ?? Java Basics - Anfänger-Themen 5
P Liste in einer Klasse füllen und mehreren anderen Klassen lesend verwenden Java Basics - Anfänger-Themen 5
F JTable zur laufzeit füllen Java Basics - Anfänger-Themen 7
P Erste Schritte JTable mit Daten aus Acces DB füllen und Actionlistener einsetzen Java Basics - Anfänger-Themen 29
H Methoden Variable mit Methode füllen? Java Basics - Anfänger-Themen 10
T Erste Schritte Int Array zufällig mit Zahlen füllen Java Basics - Anfänger-Themen 7
P Objekt mit Werten aus Array füllen Java Basics - Anfänger-Themen 10
L GridLayout mit JLabel-Array füllen Java Basics - Anfänger-Themen 12
J 2 JTables zusammenhängend füllen Java Basics - Anfänger-Themen 3
H Unterquadrate bei Sudoku füllen Java Basics - Anfänger-Themen 9
X Array Füllen Java Basics - Anfänger-Themen 16
Joew0815 Homepage Textfeld füllen und Button klicken Java Basics - Anfänger-Themen 10
E Array mit Zufallswerten von 1 bis 45 ohne Wiederholung füllen Java Basics - Anfänger-Themen 21
K Aus Variable aus Datei füllen Java Basics - Anfänger-Themen 8
E Tablemodel füllen..mit gefilterten Daten Java Basics - Anfänger-Themen 2
K ArrayList random füllen Java Basics - Anfänger-Themen 2
E Input/Output Inputstream während der Laufzeit füllen Java Basics - Anfänger-Themen 2
J JTable mit Daten aus Datenbank füllen Java Basics - Anfänger-Themen 3
P Collections Vector füllen in for-Schleife Java Basics - Anfänger-Themen 3
K Zufällige Auswahl innerhalb eines Arrays und Arrays aus JLabel füllen Java Basics - Anfänger-Themen 32
T JTree füllen Java Basics - Anfänger-Themen 3
K Durch ändern eines Buttons String füllen Java Basics - Anfänger-Themen 14
R Nächstes leeres Feld im array füllen? Java Basics - Anfänger-Themen 14
S JComboBox mit ArrayList füllen Java Basics - Anfänger-Themen 7
S JComboBox füllen Java Basics - Anfänger-Themen 9
B Queue mit Daten aus einem Stack füllen Java Basics - Anfänger-Themen 21
B Array füllen Java Basics - Anfänger-Themen 14
K Collections Wie kann Ich eine Hashmap mit verschiedenen Hashsets füllen. Java Basics - Anfänger-Themen 4
F Tabelle in anderer Klasse füllen Java Basics - Anfänger-Themen 9
D GUI abhängig von den Attributen füllen! Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben