使用扫描程序分析文件中的输入。JAVA
我是java新手,我正在创建一个文件目录来存储电影和关于电影的信息。电影和信息存储在如下文件中:使用扫描程序分析文件中的输入。JAVA,java,java.util.scanner,Java,Java.util.scanner,我是java新手,我正在创建一个文件目录来存储电影和关于电影的信息。电影和信息存储在如下文件中: Movie Title Rating Year Reviews Month Day Year 标题在第一行,其他信息在第二行。因此,对于多部电影,它看起来是这样的: Movie Title Rating Year Reviews Month Day Year Movie Title Rating Year Reviews Month Day Year Movie Title Rating Yea
Movie Title
Rating Year Reviews Month Day Year
标题在第一行,其他信息在第二行。因此,对于多部电影,它看起来是这样的:
Movie Title
Rating Year Reviews Month Day Year
Movie Title
Rating Year Reviews Month Day Year
Movie Title
Rating Year Reviews Month Day Year
Star Wars PG 1977 5 stars 1/5/2018
……等等。我有一个将电影打印到控制台的方法,但是我遇到了正确格式化电影的问题。电影信息的格式应如下所示:
Movie Title
Rating Year Reviews Month Day Year
Movie Title
Rating Year Reviews Month Day Year
Movie Title
Rating Year Reviews Month Day Year
Star Wars PG 1977 5 stars 1/5/2018
每列应正确对齐。标题、评级和年份应左对齐;人数
星星和日期右对齐
第一次它完全按照我想要的方式打印电影信息,但是当我添加多部电影时,它会把事情搞砸。这是我的代码,我相信问题出在listMovies方法中,我试图格式化输出,但我包含了我的所有代码,以防在其他地方出错
public class Directory
{
private static final String dir = "data/cs2410-directory.data";
String mTitle,mRat,mRel,mRev,mM,mD,mY;
public Directory()
{
mTitle = "Movie Title";
mRat = "Rating";
mRel = "Year";
mRev = "Reviews";
mM = "Month";
mD = "Day";
mY ="Year";
insertMovie();
listMovies();
}
private void insertMovie()
{
PrintWriter dirIn = null;
try
{
dirIn = new PrintWriter(new FileOutputStream(dir,true));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
dirIn.println(mTitle);
dirIn.println(mRat+" "+mRel+" "+mRev+" "+mM+" "+mD+" "+mY);
dirIn.close();
System.out.print("The following movie has been added to the directory:\n");
System.out.print(mTitle+" ("+mRel+") "+mRat+"\n");
System.out.print("Stars: "+mRev+"\n");
System.out.print("Last Watched: "+mM+"/"+mD+"/"+mY+"\n");
}
private void listMovies()
{
Scanner dirOut = null;
try
{
dirOut = new Scanner(new FileReader(dir));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
while (dirOut.hasNext()) //PROBLEM
{
System.out.printf("%-15s%-10s%-10s%5s%10s/%s/%s\n", dirOut.nextLine(),dirOut.next()
,dirOut.next(),dirOut.next(),dirOut.next(),dirOut.next(),dirOut.next());
}
dirOut.close();
}
public static void main(String[] args)
{
new Directory();
}
这是一部电影运行一次程序后的输出,它应该是这样的:
The following movie has been added to the directory:
Movie Title (Year) Rating
Stars: Reviews
Last Watched: Month/Day/Year
Movie Title Rating Year Reviews Month/Day/Year
这是在运行两次之后:
The following movie has been added to the directory:
Movie Title (Year) Rating
Stars: Reviews
Last Watched: Month/Day/Year
Movie Title Rating Year Reviews Month/Day/Year
Movie Exception in thread "main" java.util.NoSuchElementException
Title Rating Year/Reviews/Month
at java.base/java.util.Scanner.throwFor(Scanner.java:858)
at java.base/java.util.Scanner.next(Scanner.java:1381)
at cs2410.assn3.directory.Directory.listMovies(Directory.java:71)
at cs2410.assn3.directory.Directory.<init>(Directory.java:32)
at cs2410.assn3.directory.Directory.main(Directory.java:79)
这是在运行5次之后:
The following movie has been added to the directory:
Movie Title (Year) Rating
Stars: Reviews
Last Watched: Month/Day/Year
Movie Title Rating Year Reviews Month/Day/Year
Movie Title Rating Year/Reviews/Month
Day Year Movie Title Rating Year/Reviews/Month
Day Year Movie Title Rating Year/Reviews/Month
Day Year Movie Title Rating Year/Reviews/Month
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:858)
at java.base/java.util.Scanner.next(Scanner.java:1381)
at cs2410.assn3.directory.Directory.listMovies(Directory.java:71)
at cs2410.assn3.directory.Directory.<init>(Directory.java:32)
at cs2410.assn3.directory.Directory.main(Directory.java:79)
如果我正确理解了这个问题,那么解决方案非常简单: 在dirOut.hasNext循环中的System.out.printf下面添加以下行
dirOut.nextLine();
您的输入模式有两行;这个额外的下一行正确地在文件中前进。文件是否以换行符结尾?@the_storyteller这是我用来将电影输入文件的代码:dirIn.printlnmTitle;printlnmRat++mRel++mRev++mM++mD++mY;迪林·克洛斯;扫描仪不格式化输出,它解析输入。您的问题与格式化无关……正如我所说,java是全新的!英雄联盟非常感谢。