java - 如何使用扫描仪将项目添加到数组列表

标签 java arraylist java.util.scanner

我正在从两个文件中获取电影项目,并通过使用扫描仪读取文件内容将这两个内容添加到数组列表“listOne”和“listTwo”中。然后将这两个列表合并为一个。然而,虽然扫描仪可以很好地读取文件,但我的 .add 似乎没有将它们正确添加到 ArrayLists 中。

我确保我的合并器和打印器都能正常工作。完成此操作后,我打印了扫描仪正在读取的内容以及添加后列表的内容。扫描仪显示正确的信息(即 A,J.Edgar,2011,R,1),但列表内容为我提供了基本值(即 [标题:,年份:0,评级:null,评论:0;] )。

//这是我的主类

 Scanner fileScanner; //Scanner to read TestInput1.txt
 Scanner fileScannerTwo; //Scanner to read TestInput2.txt
 ArrayList<Movie>listOne = new ArrayList<Movie>(); //first list
 ArrayList<Movie>listTwo = new ArrayList<Movie>(); //second list
 ArraryList<Movie>outList = new ArrayList<Movie>(); //merged&sorted list

 try{
      fileScanner = GetInputFile("Enter input filename: ");
      while(fileScanner.hasNextLine())
      {
           String[] elements = fileScanner.nextLine().split(",");
           if(elements[0].equals("A")) //each movie has "A" to give ok
           {
                listOne.add(new Movie(elements[1], 
                Integer.parseInt(elements[2]), elements[3], 
                Integer.parseInt(elements[4])));
           }
      }
      //The same code but replace "listOne" with "listTwo"
 ..........
 ..........
      //PrintWriter that works properly
 ..........
 ..........

 }//end of try
 catch(FileNotFoundException ex){
      System.out.println("User terminated program");
 }

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '

 //this is my Movie class
 private String movieTitle;
 private int releaseYear;
 private String rating;
 private int movieReview;

 public Movie(String Title, int Year, String rating, int Review)
 {
      movieTitle = "";
      releaseYear = 0;
      rating = "";
      movieReview = 0;
 }
 public String getTitle()
 {
      return movieTitle;
 }
 public int getYear()
 {
      return releaseYear;
 }
 public String getRating()
 //same stuff
 public int getReview()
 //same stuff

 public int compareTo(Movie other) //haven't used this yet, but will to sort
 {
    int makeComparison = this.movieTitle.compareTo(other.movieTitle);

    if(makeComparison != 0)
        return makeComparison;

    else
    {
        if(this.releaseYear != other.releaseYear)
            return this.releaseYear - other.releaseYear;

        else
            return 0;
    }
 }

 public String toString()
 {
      return String.format("Title: %s, Year: %s, Rating: %s, Review: %s;", 
                           this.movieTitle, this.releaseYear, this.rating, 
                           this.movieReview);
 }

我希望输出看起来像 [标题:J.Edgar,年份:2011,评级:R,评论:1] 但我得到 [标题:,年份:0,评级:空,评论:0;]

以下是该文件的示例: A、J。埃德加,2011,R,1

A,夺宝奇兵与末日神殿,1984,PG,1

A,母亲节,2016,PG-13,4

A,世界史第一部分,1981,R,1

A,鳄鱼猎人,2002,PG,2

最佳答案

发现问题:

public Movie(String Title, int Year, String rating, int Review)
{
    movieTitle = "";
    releaseYear = 0;
    rating = "";
    movieReview = 0;
}

您没有使用任何构造函数参数。您只是总是将标题设置为“”,将发行年份设置为 0 等等。

试试这个:

public Movie(String Title, int Year, String rating, int Review)
{
    movieTitle = Title;
    releaseYear = Year;
    this.rating = rating;
    movieReview = Review;
}

此外,请考虑遵循 Java 命名和代码标准。普遍接受的标准是变量名始终以小写字母开头,而编写构造函数就是使用与类成员完全相同的名称,因此:

public Movie(String movieTitle, int releaseYear, String rating, int movieReview) {
    this.movieTitle = movieTitle;
    this.releaseYear = releaseYear;
    this.rating = rating;
    this.movieReview = movieReview;
}

关于java - 如何使用扫描仪将项目添加到数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55837512/

相关文章:

java - 单位转换器...不断返回 0

java - 无法克服这个 org.springframework.dao.dataaccessException

java - 为什么当我修改原始ArrayList时,复制的ArrayList也会被修改

java - 如何将数组列表接受到方法中

Java 数组列表导航

java - 多个扫描仪 DoWhile HiLo(10 面骰子游戏)

java - 使用 URL 上的 Scanner 类引发病毒?

java - 当给定高值时程序崩溃

java - 给定 Horizo​​ntalFieldManager 中的两个标签字段,我应该如何显示第二个标签的全文而不换行?

java - Android打开失败: EACCES (Permission denied) when writing file in data/data/package/files