2016-03-31 7 views
0

Beim Einfügen einer TXT-Datei in eine Liste laufe ich weiterhin in einen InputMismatchException-Fehler. Das liest nicht den "MovieType" oder "AlbumTitle". Relevanter Code wurde hinzugefügt.InputMismatchException beim Eingeben mehrerer Zeilen in ArrayList

public class MovieManager { 

    public static void main(String[] args) throws FileNotFoundException { 
     ArrayList<MediaItem> list = new ArrayList<>(); 
     Scanner inputFile = new Scanner(new File("collection.txt")); 
     try { 
      while (inputFile.hasNextLine()){ 
       String mediaType = inputFile.nextLine(); 
       if (mediaType.equals("Movie")){ 
        String movieTitle = inputFile.nextLine(); 
        //System.out.println("String" + movieTitle); 
        int movieYear = inputFile.nextInt(); 
        //System.out.println("int" + movieYear); 
        String movieType = inputFile.nextLine(); 
        //System.out.println("String" + movieType); 
        Movie mov = new Movie(movieTitle, movieYear, movieType); 
        list.add(mov); 
       } else if (mediaType.equals("Album")) { 
        String albumArtist = inputFile.nextLine(); 
        //System.out.println("String" + albumArtist); 
        int albumYear = inputFile.nextInt(); 
        //System.out.println("int" + albumYear); 
        String albumTitle = inputFile.nextLine(); 
        //System.out.println("String" + albumTitle); 
        Album alb = new Album(albumArtist, albumYear, albumTitle); 
        list.add(alb); 
       } 
      } 
      inputFile.close(); 
      System.out.print(list); 
     } catch(InputMismatchException e) { 
      inputFile.next(); 
     } 
    } 
} 

Collection.txt

Album 
ABBA 
1976 
Arrival 
Album 
ABBA 
1981 
The Visitors 
Album 
The Beatles 
1969 
Abbey Road 
Album 
Nazareth 
1975 
Hair of the Dog 
Movie 
Beauty and the Beast 
1991 
VHS 
Movie 
It's a Wonderful Life 
1946 
DVD 
Movie 
Tron 
1983 
Laserdisc 
Movie 
Tron: Legacy 
2010 
Blu-ray 
+0

Sie haben eine Menge 'println()' s in Ihrem Code - wie weit ist der Code gekommen? – AJNeufeld

+0

Es hat alles bis zur letzten Zeile gedruckt. Aber übersprungen die Album Title und MovieType. – Slowtailes

+0

Also dann müssen Sie nicht eine "InputMismatchException" bekommen, oder? – AJNeufeld

Antwort

0

Mit einem Eingangsstrom 1976\n enthält, ein Aufruf an Scanner#nextInt() verbrauchen nur die Ziffer Zeichen. Es lässt das \n Newline-Zeichen in dem Eingabestream für den nächsten Aufruf an eine Scanner-Methode, um damit umzugehen.

Der nachfolgende Aufruf von Scanner#nextLine() sofort sieht den \n, Charakter und verbraucht es und gibt die leere Zeichenkette, denn nach den Ziffern 1976 bis zum Ende der Zeile die leere Zeichenkette war.

Oder visualisiert eine andere Art und Weise ... nextline(), nextInt() nextline() analysiert:

ABBA \n 1976 \n Arrival \n 

als:

[ABBA\n][1976][\n] 

Rückkehr:

"ABBA" 1976 "" 

Lösung:

Sie müssen den Rest der Zeile "Jahr" nach dem Aufruf von nextInt() verwerfen, indem Sie sofort nextLine() aufrufen und den zurückgegebenen Wert ignorieren.

Verwandte Themen