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.
Kodunuzda çok fazla println() var - kod ne kadar uzağa ulaştı? – AJNeufeld
Her şeyi son satıra kadar yazdırdı. Ancak AlbumTitle ve MovieType atlandı. – Slowtailes
Yani bir "InputMismatchException" almıyor olmalısınız, değil mi? – AJNeufeld