2016-03-31 27 views
0

'a birden çok satır girerken .txt dosyasını bir listeye koyarken, bir InputMismatchException hatasını çalıştırmaya devam ediyorum. Bu "MovieType" veya "AlbumTitle" okumayacaktır. İlgili kod eklendi. 1976\n ihtiva eden bir giriş akışı ile Collection.txtInputMismatchException, ArrayList

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

Kodunuzda çok fazla println() var - kod ne kadar uzağa ulaştı? – AJNeufeld

+0

Her şeyi son satıra kadar yazdırdı. Ancak AlbumTitle ve MovieType atlandı. – Slowtailes

+0

Yani bir "InputMismatchException" almıyor olmalısınız, değil mi? – AJNeufeld

cevap

0

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(); 
     } 
    } 
} 

, Scanner#nextInt() bir çağrı sadece basamaklı karakterleri tüketecektir. Bir sonraki Scanner yönteminin üstesinden gelmek için \n yeni satır karakterini giriş akışında bırakır.

Scanner#nextLine() sonraki çağrı derhal \n, karakterini görür ve onu tüketir ve satırın sonuna kadar basamak sonra 1976 boş dize olduğundan, boş bir dize döndürür.

ABBA \n 1976 \n Arrival \n 

olarak:

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

dönen:

"ABBA" 1976 "" 

Veya, ayrıştırır başka bir yol ... nextLine(), nextInt(), nextLine() görsel Çözüm:

nextInt() numaralı telefonu arayarak nextLine() numaralı telefonu arayarak ve iade edilen değeri göz ardı ederek "yıl" satırının kalanını atmanız gerekir.