2016-03-31 11 views
0

.txtファイルをリストに入れているうちに、InputMismatchExceptionエラーが発生し続けます。 「MovieType」や「AlbumTitle」は読み込まれません。関連コードが追加されました。複数の行をArrayListに入力中にInputMismatchExceptionが発生する

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

あなたのコードに 'println()'がたくさんあります。コードはどれだけ手に入りましたか? – AJNeufeld

+0

最終行まですべてを印刷しました。しかし、AlbumTitleとMovieTypeはスキップされました。 – Slowtailes

+0

それでは、あなたは 'InputMismatchException'を取得してはいけませんね、そうですか? – AJNeufeld

答えて

0

1976\nを含む入力ストリームと、Scanner#nextInt()への呼び出しはのみの数字文字を消費します。これは、\n改行文字を入力ストリームに残します。Scannerメソッドの次の呼び出しが処理されます。

Scanner#nextLine()への後続の呼び出しはすぐに\n、文字を見て、それを消費し、行の最後の桁の後に1976が空の文字列だったので、空の文字列を返します。

または、別の方法を可視化... nextLine()、nextInt()、nextLine()は、解析します。

"ABBA" 1976 "" 

:帰国

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

:として

ABBA \n 1976 \n Arrival \n 

をソリューション:

nextInt()に電話した後、残りの「year」行を破棄し、すぐにnextLine()を呼び出して戻り値を無視する必要があります。

関連する問題