Reader

Windows10

Bekanntes Mitglied
Bei folgenden zwei Codezeilen taucht bei meinem Programm ein Fehler auf!
Die zwei Codezeilen:
Java:
 Student s = new Student(arr[0], arr[1]);
            l.add(s);
Der Fehler:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at schuelerliste.Schuelerliste.main(Schuelerliste.java:37)
C:\Users\Philipp\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 5 seconds)

Was könnte da falsch sein?

Der ganze Code:
Java:
package schuelerliste;

import java.io.*;
import java.util.*;

public class Schuelerliste
{

    public static void main(String[] args) throws FileNotFoundException, IOException
    {
        Reader r = new FileReader("Schueler.txt");
        BufferedReader br = new BufferedReader(r);
        BufferedReader rb = new BufferedReader(new InputStreamReader(System.in));
        List<Student> l = new ArrayList<>();
        LineNumberReader lnr = new LineNumberReader(br);
        Writer out = new FileWriter("S.txt");
        while (true)
        {
            String line = br.readLine();
            if (line == null)
            {
                break;
            }
            String[] arr = line.split(";");
            Student s = new Student(arr[0], arr[1]);
            l.add(s);
            int linenumber = lnr.getLineNumber() + 1;
            System.out.println("Gebe Grupper ein!");
            String gruppe = rb.readLine();
            System.out.println("PC-Nummer eintragen!");
            String nr = rb.readLine();
            int pcNr = Integer.parseInt(nr);
            out.write(linenumber + " " + s.getNachname() + " " + s.getVorname() + " " + gruppe + " " + pcNr);
        }
        r.close();
        out.flush();
        out.close();
    }

}

Der Code der Klasse Schüler (für das angelegte Object oben):
Java:
package schuelerliste;

public class Student implements Comparable<Student>
{

  private String nachname;
  private String vorname;

  public Student(String nachname, String vorname)
  {
  this.nachname = nachname;
  this.vorname = vorname;
  }

  public String getNachname()
  {
  return nachname;
  }

  public void setNachname(String nachname)
  {
  this.nachname = nachname;
  }

  public String getVorname()
  {
  return vorname;
  }

  public void setVorname(String vorname)
  {
  this.vorname = vorname;
  }

  @Override
  public int compareTo(Student s)
  {
  if (nachname.charAt(0) == s.getNachname().charAt(0))
  {
  return 0;
  }
  if (nachname.charAt(0) > s.getNachname().charAt(0))
  {
  return 1;
  }
  return -1;
  }

}
 

Windows10

Bekanntes Mitglied
Danke, jetzt geht es wieder, ich hatte Leerzeilen in der Datei. Dafür hab ich jetzt ein anderes Problem: Die Linenumber ist immer 0!

Mein bearbeiteter Code:
Java:
package schuelerliste;

import java.io.*;
import java.util.*;

public class Schuelerliste
{

    public static void main(String[] args) throws FileNotFoundException, IOException
    {
        Reader r = new FileReader("Schueler.txt");
        BufferedReader br = new BufferedReader(r);
        BufferedReader rb = new BufferedReader(new InputStreamReader(System.in));
        List<Student> l = new ArrayList<>();
        LineNumberReader lnr = new LineNumberReader(br);
        Writer out = new FileWriter("S.txt");
        while (true)
        {
            String line = br.readLine();
            if (line == null)
            {
                break;
            }
            int linenumber = lnr.getLineNumber();
            String[] arr = line.split(";");
            Student s = new Student(arr[0], arr[1]);
            l.add(s);
            System.out.println("Gebe Gruppe ein!");
            String gruppe = rb.readLine();
            System.out.println("PC-Nummer eintragen!");
            String nr = rb.readLine();
            int pcNr = Integer.parseInt(nr);
            out.write(linenumber + " " + s.getNachname() + " " + s.getVorname() + " " + gruppe + " " + pcNr);
            out.write(System.getProperty("line.separator"));
        }
        r.close();
        out.flush();
        out.close();
    }

}
 

mrBrown

Super-Moderator
Mitarbeiter
Du liest die Datei über den BufferedReader ein, da solltest du stattdessen den LineNumberReader benutzen ;)
 

Major_Sauce

Bekanntes Mitglied
Das hier sollte in etwa passen. Ich habe den Linereader rausgenommen, und auch das "while(true)", das ist evil. Könnte sein dass noch was ausgebessert werden muss, habe das direkt hier in der Antwort umgebaut also sry wenn was an der Syntax nicht passt...

Java:
package schuelerliste;

import java.io.*;
import java.util.*;

public class Schuelerliste
{

    public static void main(String[] args) throws FileNotFoundException, IOException
    {
 
        BufferedReader br = new BufferedReader(new FileReader("Schueler.txt"));
        BufferedReader rb = new BufferedReader(new InputStreamReader(System.in));
        List<Student> l = new ArrayList<>();
        Writer out = new FileWriter("S.txt");
        String line = br.readLine();
        int linenumber = 0;
        while (line != null)
        {
            String[] arr = line.split(";");
            Student s = new Student(arr[0], arr[1]);
            l.add(s);
            System.out.println("Gebe Grupper ein!");
            String gruppe = rb.readLine();
            System.out.println("PC-Nummer eintragen!");
            String nr = rb.readLine();
            int pcNr = Integer.parseInt(nr);
            out.write(linenumber + " " + s.getNachname() + " " + s.getVorname() + " " + gruppe + " " + pcNr);
            line = br.readLine();
            linenumber++;
        }
        br.close();
        out.flush();
        out.close();
    }

}

Mfg Major
 

mrBrown

Super-Moderator
Mitarbeiter
Wenn schon fertigen Code, dann doch auch vernünftigen ;)

Java:
public static void main(String[] args) throws IOException {

        List<Student> students = new ArrayList<>();

        try (Writer out = new FileWriter("S.txt");
             LineNumberReader lnr = new LineNumberReader(new FileReader("Schueler.txt"))) {
            Scanner stdinReader = new Scanner(System.in)

            for (String line = lnr.readLine(); line != null; line = lnr.readLine()) {

                String[] arr = line.split(";");
                Student s = new Student(arr[0], arr[1]);
                students.add(s);

                System.out.println("Gebe Grupper ein!");
                String gruppe = stdinReader.nextLine();
                System.out.println("PC-Nummer eintragen!");
                int pcNr = stdinReader.nextInt();
                stdinReader.nextLine(); //Zeilenumbruch lesen

                out.write(lnr.getLineNumber() + " " + s.getNachname() + " " + s.getVorname() + " " + gruppe + " " + pcNr);
            }
        }
    }

Wie lange dauert es wohl diesmal, bis "Scanner ist doof!!11elf" kommt?

Edit: Scanner verschoben
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
@mrBrown Den Scanner bitte nicht in den try-resource Block legen, denn es wird auch damit System.in geschlossen und das muss unbedingt vom System und nicht vom User gemacht werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
R CSV Reader läuft nicht richtig an Java Basics - Anfänger-Themen 8
S Input/Output Reader/Writer finden file nicht Java Basics - Anfänger-Themen 3
L Klassen NFC Reader und JavaFx Problem -> threads? Java Basics - Anfänger-Themen 2
A Reader wohin werden Daten gespeichert? Java Basics - Anfänger-Themen 7
Textsurfer Erste Schritte CSV Import Reader Writer Java Basics - Anfänger-Themen 0
A Reader für Benutzereingabe in Eclipse importieren Java Basics - Anfänger-Themen 3
W Java XML-Reader: Content not allowed in Prolog Java Basics - Anfänger-Themen 7
D Jpg in BufferedImage Reader oder Array ablegen? Java Basics - Anfänger-Themen 5
H "Conways GameofLife - Vom Reader ins Array" Java Basics - Anfänger-Themen 5
C FileWriter bzw. Reader fehlerhaft Java Basics - Anfänger-Themen 6
Sogomn Input/Output Reader, Writer und Streams Java Basics - Anfänger-Themen 6
P txt reader Problem Java Basics - Anfänger-Themen 17
L buffered reader produziert zu viele und seltsame zeichen Java Basics - Anfänger-Themen 2
A Interface Reader interface verwenden Java Basics - Anfänger-Themen 4
S Input/Output Reader: "null" wenn While-Ende Java Basics - Anfänger-Themen 5
F Reader - brauche Hilfe Java Basics - Anfänger-Themen 19
M Reader-Problem Java Basics - Anfänger-Themen 5
Haubitze_Broese RSS-Reader? Java Basics - Anfänger-Themen 2
Haubitze_Broese Pattern für Links in RSS-Reader Java Basics - Anfänger-Themen 6
A Problem Reader Java Basics - Anfänger-Themen 39
Developer_X Sav-Data reader, fehler Java Basics - Anfänger-Themen 2
V Buffered Reader, erst ab bestimmter Zeile auslesen? Java Basics - Anfänger-Themen 8
K Probleme mit Buffered Reader Java Basics - Anfänger-Themen 8
P Buffered Reader an Anfang setzen Java Basics - Anfänger-Themen 4
D RSS Reader mit Redaktionssystem Java Basics - Anfänger-Themen 7
L Streams und Reader/Writer Java Basics - Anfänger-Themen 8
F Was gibt der Buffered Reader zurück bei Dateiende? Java Basics - Anfänger-Themen 2
T Writer/Reader Problem Java Basics - Anfänger-Themen 4
H Buffered Reader Java Basics - Anfänger-Themen 7
G Buffered REader, String, ist mein code korrekt? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben