Daten aus Array in Klasse übertragen

Suppe

Mitglied
Hallo
Ich habe eine Txt- Datei mit Kundenaufträgen die ich in Java einlesen will. Um die Kundenaufträge zu speichern habe ich eine Klasse „Auftrag“ erstell. Mein Plan war alle Kundenaufträge in ein Array zu speichern dass aus Elementen der Klasse besteht.
Leider sind meine Programmierkenntnisse etwas improvisiert. Daher musste ich mich ein bisschen mehr bei Quellen aus dem Internet bedienen.
Zum einlesen der Daten habe ich diese Quelle gefunden:
Aus Dateien lesen - Java als erste Programmiersprache - Javaschublade
Jetzt habe ich die Aufträge in einzelnen Strings. Um die Auftragsdaten zu zerteilen habe ich diese Quelle gefunden:
Rheinwerk Computing :: Java ist auch eine Insel – 4.8 Zerlegen von Zeichenketten
Jetzt habe ich die Auftragsdaten eines Auftrags in einem Array und will sie in eine Klassen übertragen. Und genau da entsteht ein Fehler die ich nicht beheben kann. Irgendwie kann ich den Inhalt des Arrays nicht in die Variablen der Klasse übertragen. Ich erhalte immer eine Fehlermeldung.
Quellcode Klasse „Auftrag“
Java:
package verschnittallepotionen;
 
public class Auftrag {
       /* in dieser Kasse werden die einzelnen Aufträge gespeichert */
       String auftragnr;
       int laenge;
       int breite;
       int boegenmin;
       int boegenmax;
  
void Auftrag() {
       auftragnr = "";
       laenge = 0;
       breite = 0;
       boegenmin = 0;
       boegenmax = 0;
      
}
}
Quellcode der Main:
Java:
package verschnittallepotionen;
 
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.regex.Pattern;
 
public class verschnittallepotionenmain {
 
       public static void main(String[] args) throws IOException
       {
             // TODO Auto-generated method stub
 
           FileReader fr = new FileReader("auftraege.txt");
           BufferedReader br = new BufferedReader(fr);
 
           Auftrag alleauftraege[];
           String zeile = "";
           String[] auftragzeile;
           int i=0;
          
           br.readLine(); // in der Zeile 0 steht kein Auftrag daher wird sie hier gelesen um sicher zu stellen, dass das auslesen der Aufträge mit dem ersten Auftrag beginnt
 
           while( (zeile = br.readLine()) != null )
           {
             //System.out.println(zeile);
              auftragzeile = zeile.split( Pattern.[I]quote[/I]( "|" ) );
              System.[I]out[/I].println( Arrays.[I]toString[/I](auftragzeile) );
              //alleauftrag[i]= auftrag;
             
              alleauftraege[i].auftragnr = auftragzeile[0];
              i++;
           }
 
           br.close();   
       } 
}

Fehlermeldung:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The local variable alleauftraege may not have been initialized

at verschnittallepotionen.verschnittallepotionenmain.main(verschnittallepotionenmain.java:39)

Ich bin mir sicher, dass der Fehler mit der Zeile
Java:
[U] alleauftraege[/U][i].auftragnr = auftragzeile[0];
zu tun hat. Denn wenn ich diese Zeile auskommentiere bekomme ich keine Fehlermeldung. Als Programmierumgebung verwende ich Eclipse Version: Luna Service Release 2 (4.4.2)
Falls jemand weiß wo der Fehler liegt wäre ich dankbar.
 
Zuletzt bearbeitet von einem Moderator:

stg

Top Contributor
Du erstellst zwar das Array "alleauftraege" aber initialisierst es nicht.

Da du außerdem im Vorfeld nicht weißt, wie groß das Array sein soll, würde ich an deiner Stelle eher mit einer List arbeiten. Wenn du die Daten später dringend als Array brauchst, dann schreibe anschließend die Daten aus der List in ein Array, dann weißt du auch, wie groß es sein muss.
 

Suppe

Mitglied
Die Initalisierung müsste doch so aussehen oder?:

Java:
Auftrag alleauftraege[] = new Auftrag[36];

Warum bekomme ich dann immer noch eine Fehlermeldung?:

[1975221-1-1-1, 630, 763, 78000, 82000]
Exception in thread "main" java.lang.NullPointerException
at verschnittallepotionen.verschnittallepotionenmain.main(verschnittallepotionenmain.java:39)

Und warum muss ich die Zeile:

Java:
String[] auftragzeile;

Nicht initialisieren?
 

stg

Top Contributor
Und warum muss ich die Zeile:
Java:
String[] auftragzeile;
Nicht initialisieren?

Machst du doch...

Die Initalisierung müsste doch so aussehen oder?:
Java:
Auftrag alleauftraege[] = new Auftrag[36];
Warum bekomme ich dann immer noch eine Fehlermeldung?:

Weil du zwar das Array initialisierst, aber alle Einträge deines Arrays null sind. alleauftraege liefert also null zurück, da du nie ein Auftrag-Objekt erstellt hast.
 

Maggot

Bekanntes Mitglied
Du musst

Java:
 String[] auftragszeile;
nicht initialisieren weil sie durch
Java:
java.split(...)
initialisiert wird.

Ich würde den Code sowieso zu folgenden ändern:

Java:
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("auftraege.txt");
        BufferedReader br = new BufferedReader(fr);


        List<Auftrag> alleauftraege = new ArrayList<Auftrag>();
        String zeile = "";
        String[] auftragzeile;


        br.readLine(); // in der Zeile 0 steht kein Auftrag daher wird sie hier gelesen um sicher zu stellen, dass das
                       // auslesen der Aufträge mit dem ersten Auftrag beginnt


        while ((zeile = br.readLine()) != null) {
            // System.out.println(zeile);
            auftragzeile = zeile.split(Pattern.quote("|"));
            System.out.println(Arrays.toString(auftragzeile));
            // alleauftrag[i]= auftrag;


            Auftrag tmp = new Auftrag();
            tmp.auftragnr = auftragzeile[0];
            alleauftraege.add(tmp);
        }


        br.close();
    }

Der Code verwendet statt einem Array jetzt eine Liste. Bei einer Liste musst du nicht wissen wie viele Elemente da jetzt reinkommen.
 

Suppe

Mitglied
Zunächst einmal danke euch beiden für die schnelle Antwort.

@Stg
Ich habe noch nicht verstanden warum diese Objekte nicht von Konstruktor der Klasse Auftrag erstellt werden.

@Maggot
Zunächst hat mich verwirrt das du die Variabel „tmp“ innerhalb der Schleife definiert hast. Wie verhält sich das? Auf eine Variable die so definiert wird kann dann beim jeweils nächsten Schleifendurchgang nicht mehr zugegriffen werden, bis eine neue Variabelle definiert wird die zufällig denselben Namen hat?
Ich habe die Änderungen so wie du sie vorgeschlagen hast durchgeführt. Mit Listen wollte ich mich sowie so noch befassen bin nur noch nicht so weit gekommen. Ich erhalte jetzt die Fehlermeldung:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
List cannot be resolved to a type
ArrayList cannot be resolved to a type

at verschnittallepotionen.verschnittallepotionenmain.main(verschnittallepotionenmain.java:24)
 

Maggot

Bekanntes Mitglied
Wird bei dir "List" und "ArrayList" rot unterstrichen? Dann fehlen dir die Imports dazu. Drück dazu einfach in Eclipse "STRG+SHIFT+O" (Der Buchstabe O nicht die Zahl 0). Dann sollte er dir alle fehlenden Imports hinzufügen.

Das mit der tmp Variabel habe ich gemacht weil die Liste ein Object vom Typ Auftrag erwartet. Man könnte auch gleich die Werte dem Konstruktor übergeben:

Java:
alleauftraege.add(new Auftrag(KONSTRUKTORARGUMENTE));

Das setzt halt voraus das du den überladenen Konstruktor hast. Ansonsten legt er einfach jeden Schleifendurchgang die Variabel tmp neu an. Du könntest auch das Auftrag tmp; ausserhalb der Schleife machen und innerhalb der Schleife dann nurnoch "tmp = new Auftrag();" und halt das Feld setzen.
 
Zuletzt bearbeitet:

stg

Top Contributor
@Stg
Ich habe noch nicht verstanden warum diese Objekte nicht von Konstruktor der Klasse Auftrag erstellt werden.

Du rufst nirgends den Konstruktor von "Auftrag" auf. Mit
Java:
Auftrag alleauftraege[] = new Auftrag[36];
erstellst du nur ein leeres Array für Objekte vom Typ Auftrag. Das, was hier mit new angelegt wird ist nur das Array selbst, nicht der Inhalt.
 

Suppe

Mitglied
Danke eurer Hilfe bin in jetzt eine ganzes Stück weiter gekommen:

Java:
package verschnittallepotionen;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;


public class verschnittallepotionenmain {

    

    

    public static void main(String[] args) throws IOException
    {
        // TODO Auto-generated method stub

        
        FileReader fr = new FileReader("auftraege.txt");
        BufferedReader br = new BufferedReader(fr);

        List<Auftrag> alleauftraege = new ArrayList<Auftrag>();
        String zeile = "";
        String[] auftragzeile;
        int i=0;
       
        
        br.readLine(); // in der Zeile 0 steht kein Auftrag daher wird sie hier gelesen um sicher zu stellen, dass das auslesen der Aufträge mit dem ersten Auftrag beginnt


        while( (zeile = br.readLine()) != null )
        {
               auftragzeile = zeile.split( Pattern.quote( "|" ) );
               System.out.println( Arrays.toString(auftragzeile) );
            
            Auftrag tmp = new Auftrag();
            
            tmp.auftragnr = auftragzeile[0];
            tmp.laenge = Integer.parseInt(auftragzeile[1]);
            tmp.breite = Integer.parseInt(auftragzeile[2]);
            
            System.out.println("die länge ist " + tmp.laenge);
            
            
    
            
            System.out.println(tmp.auftragnr);
            
            alleauftraege.add(tmp);
            
            
            
            
            Auftrag tmp2 = new Auftrag();
            tmp2 = alleauftraege.get(i);
            
            System.out.println(tmp2.auftragnr);
            
            i++;
        }

        br.close();
        
    }

}

Das Programm scheint auch zu machen was es soll. Allerdings bekomme ich immer noch eine Fehlermeldung:

1968938-1-1-1
1968938-1-1-1
[1971610-2-1-1, 503, 740, 30567, 35523]
die länge ist 503
1971610-2-1-1
1971610-2-1-1
[]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at verschnittallepotionen.verschnittallepotionenmain.main(verschnittallepotionenmain.java:43)
Wenn ich die Zeile 43 auskommentiere bekomme ich dieselbe Fehlermeldung für Zeile 44. Was bedeutet diese Fehlermeldung? Hat dieser Fehler irgendwelche Auswirkungen wenn ich das Programm außerhalb der Eclipse- Umgebung laufen lasse?
 

Suppe

Mitglied
Noch eine Frage: Wenn ich eine Methode von Auftrag für ein Objekt in alleauftraege aufrufen will wie mache ich das? Bzw geht das?
 

Suppe

Mitglied
Ok ich habe ein bisschen rumprobiert es sieht so aus als würde beim letzten aufrufen der Schleife ein Array der Länge 1 generiert werden. Und wenn ich dann versuche auf das Objekt nur 1 zuzugreifen gibt das einen Fehler.
Ich habe jetzt eine eine if- Bedingung eingefügt um das Problem zu umgehen. Ich habe noch nicht verstanden warum die Bedingung:

Java:
 (zeile = br.readLine()) != null

die Schleife nicht abbricht wenn die txt zu end ist. Es stellt sich auch die Frage ob es nicht eine elegantere Lösung gibt.
 

Maggot

Bekanntes Mitglied
Ok ich habe ein bisschen rumprobiert es sieht so aus als würde beim letzten aufrufen der Schleife ein Array der Länge 1 generiert werden. Und wenn ich dann versuche auf das Objekt nur 1 zuzugreifen gibt das einen Fehler.
Ich habe jetzt eine eine if- Bedingung eingefügt um das Problem zu umgehen. Ich habe noch nicht verstanden warum die Bedingung:

Java:
 (zeile = br.readLine()) != null

die Schleife nicht abbricht wenn die txt zu end ist. Es stellt sich auch die Frage ob es nicht eine elegantere Lösung gibt.

Es kann sein dass eine leere Zeile in der Datei ist. Du könntest folgendes probieren:

Java:
while ((zeile = br.readLine()) != null && !zeile.isEmpty())

oder du machst nach dem Split eine abfrage ob der Array eine größe von 3 Feldern hat, so gehst du ganz sicher.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Eingelesene Daten in Array(Liste) abspeichern? Java Basics - Anfänger-Themen 18
P zweidimensionales Array anlegen und mit DB-Daten füllen Java Basics - Anfänger-Themen 14
L Daten aus Array Feld löschen Java Basics - Anfänger-Themen 2
A daten vom 1d array in 2d matrix speichern Java Basics - Anfänger-Themen 3
M Variablen Daten aus Array löschen Java Basics - Anfänger-Themen 2
P Datentypen Array mit Daten befüllen Java Basics - Anfänger-Themen 5
E array; daten aus txt auslesen Java Basics - Anfänger-Themen 5
M Methoden Daten aus einer SQL-Abfrage in eine mehrdimensionales Array einlesen Java Basics - Anfänger-Themen 7
G Kopieren von Array-Daten Java Basics - Anfänger-Themen 6
A Daten speichern und wieder in ein Array laden Java Basics - Anfänger-Themen 4
F Große Daten und große Array Java Basics - Anfänger-Themen 21
S Array Daten in Binär Datei schreiben/lesen Java Basics - Anfänger-Themen 11
Z Array mit daten einer datenbankbefüllen und dies an eine tabelle geben Java Basics - Anfänger-Themen 6
B Daten in mehrdimensionalem Array, speichern, loeschen, aendern und abrufen Java Basics - Anfänger-Themen 2
S Unbekannte Daten einlesen, speichern und in einem byte Array speichern Java Basics - Anfänger-Themen 3
A Array mit Objact als daten typ Java Basics - Anfänger-Themen 13
M Aus .txt Datei Daten in Array speichern Java Basics - Anfänger-Themen 3
G Abspeichern von Daten in Array oder ähnlichem Java Basics - Anfänger-Themen 3
G Daten aus einem Array auslesen Java Basics - Anfänger-Themen 2
Z daten in array eintragen Java Basics - Anfänger-Themen 12
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
W Daten in Echtzeit übernehmen Java Basics - Anfänger-Themen 5
Z Java ArrayList speichert falsche Daten ab bzw. gibt falsche Daten aus? Java Basics - Anfänger-Themen 42
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
E fehlermeldung bei richtigen login daten Java Basics - Anfänger-Themen 7
C Java Funktion: externe Daten vom Internet einbinden Java Basics - Anfänger-Themen 2
P Schiebefix - ArrayList überschreibt Daten Java Basics - Anfänger-Themen 3
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
M Tabellen- Daten laden Java Basics - Anfänger-Themen 2
A Klasse um daten zu einlesen Java Basics - Anfänger-Themen 26
A Literale für primitive Daten Typen Java Basics - Anfänger-Themen 4
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
A Daten auslesen/vergleichen Java Basics - Anfänger-Themen 3
D Sportwetten Daten Atomatisch analysieren um optimale Strategie zu erhalten Java Basics - Anfänger-Themen 6
S Java Daten in Excel speichern Java Basics - Anfänger-Themen 1
S Daten speichern, ohne Datenbank Java Basics - Anfänger-Themen 8
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
Shallty Daten speichern und ändern? Java Basics - Anfänger-Themen 32
M Sqlite table löschen und daten einfügen Java Basics - Anfänger-Themen 5
S Binäre-Suche bei unsortierten Daten Java Basics - Anfänger-Themen 7
N Was passiert wenn wir Daten auf der Festplatte abspeichern wollen? bzgl. BufferStreams Java Basics - Anfänger-Themen 9
T Daten von Objekten speichern Java Basics - Anfänger-Themen 7
A Minesweeper - Daten Java Basics - Anfänger-Themen 46
S Daten aus zwei Verschiedenen Tabellen in eine ArrayListe Java Basics - Anfänger-Themen 4
WPS1000 Input/Output Wie aktiviere ich den Daten Transfer von der RS232 in meine Java Applikation Java Basics - Anfänger-Themen 2
R Eigenes Protokoll zur Übermittlung von Daten zum Webserver? Java Basics - Anfänger-Themen 4
A Reader wohin werden Daten gespeichert? Java Basics - Anfänger-Themen 7
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
S Daten aus eigenständiger .class-Datei abrufen Java Basics - Anfänger-Themen 1
E Daten dem Super Aufruf übergeben Java Basics - Anfänger-Themen 3
M jTabel mit Daten Füllen Java Basics - Anfänger-Themen 5
M Wie erzeuge ich die Differenz von zwei Daten in Stunden?? Java Basics - Anfänger-Themen 2
S Daten lesen und speichern Java Basics - Anfänger-Themen 26
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
L Java Programm zum Auswerten von Daten Java Basics - Anfänger-Themen 11
H Passwortmanager, Sicherheit der Daten Java Basics - Anfänger-Themen 12
G Best Practice Wie große "Tabellen" effizient durchsuchen und Daten händeln? Java Basics - Anfänger-Themen 15
U Daten aus Datei einlesen Java Basics - Anfänger-Themen 4
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
R JTable Suchfunktion mit SQL Daten Java Basics - Anfänger-Themen 2
E Daten gehen nicht in Datenbank Java Basics - Anfänger-Themen 14
M Erste Schritte Speichern von mehreren Daten Java Basics - Anfänger-Themen 3
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
N Erste Schritte Dedicated Server \ Senden und Empfangen von Daten/Befehlen Java Basics - Anfänger-Themen 2
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
D NPE beim laden von Daten aus MySQL Java Basics - Anfänger-Themen 9
P Einlesen von Daten via BufferedReader Java Basics - Anfänger-Themen 4
P Methoden ausgelesene (CSV-) Daten in Liste einer anderen Klasse einlesen Java Basics - Anfänger-Themen 0
F Daten aus Excel-Tabelle in Java importieren Java Basics - Anfänger-Themen 15
F Http Post von mehreren Daten Java Basics - Anfänger-Themen 5
F Daten auf Webserver laden - wiederholen bei Fehler Java Basics - Anfänger-Themen 0
W Best Practice problemabhängige Persistentmachung von Daten Java Basics - Anfänger-Themen 6
P Daten von Internetseite auslesen Java Basics - Anfänger-Themen 10
N Daten/Formular per POST an Firefox/Browser senden Java Basics - Anfänger-Themen 7
D Daten mit Apache POI in eine Excel Datei schreiben Java Basics - Anfänger-Themen 5
T JTable Daten aus txt datei Java Basics - Anfänger-Themen 3
T printf Daten aus der Tabelle in Excel übernehmen Java Basics - Anfänger-Themen 5
V Einlesen von Daten Java Basics - Anfänger-Themen 8
J TableView zeigt keine Daten an Java Basics - Anfänger-Themen 14
J Daten im Programm speichern Java Basics - Anfänger-Themen 14
N Interface Daten einem Implementierten Interface zuweisen Java Basics - Anfänger-Themen 37
O Probleme mit CSV Daten Java Basics - Anfänger-Themen 10
M Arrays: Trennung von Daten und Darstellung Java Basics - Anfänger-Themen 1
M Wie sicher sind Daten im Java Programm? Java Basics - Anfänger-Themen 9
R Daten via Post an php Script senden Java Basics - Anfänger-Themen 1
B Probleme bei "Daten in CSV File schreiben". Java Basics - Anfänger-Themen 9
C Datei mit Daten einlesen und höchsten wert der zweiten Spalte ermitteln Java Basics - Anfänger-Themen 1
W (XML/XSL) Daten aus Eclipse in eine Klasse Laden. Java Basics - Anfänger-Themen 1
I Daten speichern ohne Datenbank Java Basics - Anfänger-Themen 20
D Daten von einem int in einen string Java Basics - Anfänger-Themen 5
T Input/Output Daten/Objekte einfach speichern Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben