У меня проблемы с arraylists, я не могу вернуть правильные слова

1

Программа работает хорошо, но когда я пытаюсь заставить ее вернуть "слова", она возвращает нужный объем вывода, но все имеют имя последнего ввода.

Ex. если я храню 3 разных названия книг в своем ArrayList, он возвращает 3 раза имя последней книги.

Есть ли очевидные ошибки?

(класс суперкласса и другие классы должны работать нормально)

import java.util.*;

public class libraryManager {

public static void main (String [] args) {

  String input =" ";


  ArrayList<Book> books = new ArrayList<Book>();
  ArrayList<CD> cds = new ArrayList<CD>();

  Book booka = new Book();
  CD cda = new CD();

    System.out.println("Welcome to library management system");
    Scanner reader = new Scanner(System.in);

    Scanner newBook = new Scanner(System.in);


    do{           

        System.out.println("Main menu: ");
        System.out.println(" 1. Add book to the library ");
        System.out.println(" 2. Add CD to the library ");
        System.out.println(" 3. Print items ");
        System.out.println(" 4. Exit ");
        input = reader.nextLine();


         if (input.equals("1")){
             System.out.println("Input new book: ");
             input = reader.nextLine();
             booka.setName(input);
             books.add(booka); input ="1";
        }

        if (input.equals("2")){
            System.out.println("Input new CD: ");
            input = reader.nextLine();
            cda.setName(input);
            cds.add(cda);
        }

        if (input.equals("3")){
            System.out.println("Library contains:");
            for (int i= 0; i<books.size(); i++){
                System.out.println("Book: " + books.get(i).getName());
            }
            for (int i = 0; i<cds.size(); i++){
                System.out.println("CD: " +cds.get(i).getName());
            }

            break;
        }

  }while(!input.equals( "4"));
}
}
  • 0
    предоставить тот код, в который вы добавляете объекты книги в ArrayList
Теги:
arraylist
return

2 ответа

2
Лучший ответ

Вы создаете один экземпляр книги и компакт-диска:

   Book booka = new Book();
   CD cda = new CD();

Затем вы добавляете тот же самый экземпляр снова и снова в списки, каждый раз изменяя его свойства. Поэтому вы видите, что все элементы имеют одинаковое значение (значение последнего добавленного элемента).

Вы должны создать новый экземпляр для каждого раза, чтобы добавить элемент в один из списков.

Например:

     if (input.equals("1")){
         System.out.println("Input new book: ");
         input = reader.nextLine();
         Book booka = new Book(); // add this
         booka.setName(input);
         books.add(booka); input ="1";
    }
1
booka.setName(input);
books.add(booka); input ="1";

Вот проблема! Вы добавляете то же самое вместо booka каждый раз, поэтому последнее имя, которое вы задали для booka, - это имя, которое вернет всякая ссылка на него в ArrayList!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню