Hi Leute, ich bin neu hier, arbeite aber schon etwas länger hobbymässig mit Java.
Im Moment probiere ich ein Programm zu schreiben, dass mir automatisch einen Dienstplan generiert, allerdings habe ich gleich am Anfang schon ein Problem, wenn ich alle Zeilen einer Datei mit den Namen in eine String Array überführen will, macht Java dass nicht mehr und weicht auf die catch Prozedur zurück. ( Der Fehler liegt in Zeile 18. wenn ich diese Zeile weglasse, gibt er mir einwandfrei die Namen aus, allerdings habe ich sie dann nicht im Programm )
Vllt. könnt ihr mir ja Helfen
Java:
classGenerator{publicvoid listelesen (){String[]NamenNd=null;try{File normalerdienst =newFile("Dienstplan.txt");FileReader frNormalerdienst =newFileReader(normalerdienst);BufferedReader readerNd =newBufferedReader(frNormalerdienst);String zeile =null;int i =1;while((zeile = readerNd.readLine())!=null){NamenNd[i]=zeile;System.out.println(zeile);}
readerNd.close();}catch(Exception ex){System.out.println("Ein Fehler ist beim Lesen der Datei aufgetreten, vergewissern sie sich, dass die Liste im gleichen Ordner liegt wie die Anwendung.");}}}
Wenn du nicht vorher weißt, wie viele Werte reinkommen, ist ein Array sehr ungeeignet.
Eine List (java.util.LinkedList zB) wäre viel besser, dann musst du nur liste.add(..) aufrufen.
Bei deinem jetzigen programm muss das Array erst initialisiert werden:
String[] NamenNd = new String[nötigeGröße];
Und dann müsstest du mit jeder Zeile i um eins erhöhen, um nicht alle Elemente an Position 1 einzufügen.
Edit: @Slater: Tut mir leid, dass ich deinen Denkanstoß-Versuch torpediere, zu spät gesehen^^
also, geht es nicht so wie ich den Array initialisiert habe, d.h., ich müsste ihn so deklarieren wie Fu3l das vorgeschlagen hat.
Gibt es eine Möglichkeit vorher rauszufinden wie viele Zeilen eine Textdatei hat ?
@SlaterB: nein, leider sehe ich nicht, wie das Problem dadurch lösen könnte, ich verstehe auch immer noch nicht weshalb das nicht funktioniert :bahnhof:
Vllt hat ja wer noch ne besser Idee, aber ne ganz naive Idee wäre es, einfach zwei Schleifen zu machen. In der ersten Liest du einfach jede Zeile, aber anstatt sie im Array zu speichern, zählst du ne Variable hoch. Dann erstellst du vor der zweiten ein Array der entsprechenden Größe. Danach lässt du die Schleife nochma durchlaufen.
ABER: Bei großen Dateien bestimmt nicht zu empfehlen oder bei Netzwerkverbindungen^^ Da doch lieber eine List (ist ja quasie ein dynamisches Array). Wenn du damit nicht arbeiten können solltest, dann wird es sogar Zeit, dieses sehr praktische Hilfsmittel kennen zu lernen
String[] NamenNd = null;
legt nur eine Variable an, mit Inhalt null, leer, darin musst du erst ein Array reinlegen, als ein konkretes Objekt erzeugen
und wie bereits gesagt wurde muss die Länge fest vorgegeben sein, du fragst ja jetzt selber richtigerweise auch, wie man die feststellen kann,
richtig gut jedenfalls nicht,
nimm wie gesagt wurde einfach eine Liste, da ist es egal wie viele Zeilen es werden und mit i musst du auch nicht hantieren,
wenn nötig kannst du am Ende aus der Liste ein Array machen (dann weiß man ja wieviele es sind), oder besser beider der Liste bleiben