Как добавить элементы в массив с помощью сканера - PullRequest
0 голосов
/ 24 апреля 2019

Я беру элементы Movie из двух файлов и добавляю оба содержимого в Arraylist «listOne» и «listTwo», используя сканер для чтения содержимого файла.Эти два списка затем объединяются в один.Однако, хотя сканер хорошо читает файлы, мой .add, похоже, не добавляет их в ArrayLists должным образом.

Я гарантировал, что мои слияния и печати пишут правильно.Как только я это сделал, я сделал отпечаток на том, что читает мой сканер и каково содержимое списка после добавления.Сканер показывает правильную информацию (например, A, J.Edgar, 2011, R, 1), но содержимое списка дает мне базовые значения (т.е. [Название:, Год: 0, Рейтинг: ноль, Отзыв: 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, История Мира, Часть I, 1981, R, 1

A, Крокодиловый Охотник, 2002, PG, 2

1 Ответ

0 голосов
/ 24 апреля 2019

Нашел проблему:

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;
}
...