2013-09-05 7 views
1

Я работаю над домашним заданием и не смог понять, что я сделал неправильно.Использование ArrayList <Book> для хранения названий книг

Я пытаюсь создать список названий книг с помощью ArrayList

Вот мой код до сих пор:

import java.awt.print.Book; 
import java.util.ArrayList; 
public class Books { 

    public static void main (String[] args){ 

     ArrayList<Book> bookTitle = new ArrayList<Book>(); 


     bookTitle.add ("Book title 1"); 
     bookTitle.add ("Book title 2"); 
     bookTitle.add ("Book title 3"); 

     System.out.println("Size of Book list: " + bookTitle.size()); 

    } 

} 

Этот код дает мне следующую ошибку на трех bookTitle.add линий: «Метод дополнения (Book) в типа ArrayList не применяется для аргументов (String)»

Итак, я попытался это:

Book book1 = new Book("Book title"); 
     bookTitle.add (book1); 

Это дало мне «Ошибка конструктора Book (String)».

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

Я очень благодарен вам за помощь и время.

+0

Вы действительно думаете, что этот класс делает то, что вы хотите? http://docs.oracle.com/javase/7/docs/api/java/awt/print/Book.html – FDinoff

+0

Вам нужно будет написать свой собственный класс 'Book', вместо того, чтобы использовать тот, который предоставляет Java в 'java.awt.print.Book'. Если вы поместите свою собственную книгу «Book.java» в тот же каталог, что и «Книги».java', и удалите первую строку 'import' из' Books.java', вы начнете делать некоторый прогресс. –

ответ

5

Метод add (Book) в типе ArrayList не применим для аргументов (String).

Это происходит потому, что, как вы можете видеть, что тип дженериков в вашем ArrayList<Book> bookTitle = new ArrayList<Book>(); является Book но вы добавляете String значение в BOOKTITLE, bookTitle.add ("Book title 1");

Попробуйте ArrayList<String> bookTitle = new ArrayList<String>();

Если вы все еще хотите использовать Book не String , затем создать класс Book, например:

public class Book{ 
private String bookName; 

public Book(){} 

    public String getBookName() { 
     return bookName; 
    } 

    public void setBookName(String bookName) { 
     this.bookName = bookName; 
    } 
} 

, то в основной метод попробовать:

Book book1 = new Book(); 
book1.setBookName("Book title 1"); 

ArrayList<Book> bookTitle = new ArrayList<Book>(); 
bookTitle.add (book1); 

for(Book b :bookTitle){ 
      System.out.println(b.getBookName()); 
     } 

Примечание: Удалить import java.awt.print.Book;

+1

Я думаю, что это правильный ответ. java.awt.Book - это встроенный класс, который, хотя он примерно представляет собой книгу, не то, что вы хотите, и потому что он встроен, добавление нового конструктора не поможет. – dwarduk

2

конструкторе Book (String) не определено

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

Например:

class Book{ 

private String bookName; 

public Book(String bookName){ 
this.bookName=bookName; 
} 

} 

UPDATE

И после комментариев @Josh понять, что вы импортируете импорт java.awt.print.Book;. Вы действительно хотите импортировать свою собственную реализацию Book, поэтому удалите эту строку и импортируйте правильный!

+0

Класс 'Book' должен быть [это] (http://docs.oracle.com/javase/7/docs/api/java/awt/print/Book.html), судя по импорту. –

+0

@JoshM спасибо, хороший улов, я отредактировал: D – nachokk

+0

Good :) Upvoted. –

Смежные вопросы