我在这个ArrayList中做错了什么?

时间:2013-11-27 03:15:28

标签: java arraylist

我想创建一个Book类,其中包含标题和页数的实例字段。

然后我想完成14项任务。我不会列出所有这些,但它包括添加书籍,然后更换一本书,然后添加更多。

 The Tasks: 
 1. Add (book 1 - 350 pages)
 2.Add (book 2 - 72 pages)
 3.Replace Book 2 with (book 3 - 220 pages)
 4.Add (book 4 - 120pages)
 5.Add (book 5 - 90 pages at index position 1)
 6.Add (Book 6 - 120 pages)
7. Add (book 7 - 170 pages)
8. Add(Book 8 - 400 pages)
9. Output the title of the book at index position 3
10. Output the size of the ArrayList. 
11. Remove all books that contain 120 pages.
12. Find total num of pages in remaining books in the ArrayList.
12. Output the total number of pages in the remaining books in the ArrayList.
14. Using and enhanced for loop, ouput the current books in the ArrayLIst.

编辑: 非常感谢你! 我已修复,完善并几乎完成了我的代码。唯一的问题是我认为使用增强型循环输出当前书籍的最后一部分。每当我做的时候,我会得到奇怪的数字。     包书;

import java.util.ArrayList;

public class Book {
    private String title;
    private int pages;

    public static void main(String[] args) {
        ArrayList<Book> booklib = new ArrayList<Book>();
        booklib.add(new Book("Book 1", 350));
        booklib.add(new Book("Book 2", 72));
        booklib.set(1, new Book("Book3", 220));
        booklib.add(new Book("Book 4", 120));
        booklib.add(1, new Book("Book 5", 90));
        booklib.add(new Book("Book 6", 120));
        booklib.add(new Book("Book 7", 170));
        booklib.add(new Book("Book 8", 400));

        System.out.println(booklib.get(3).gettitle());
        System.out.println(booklib.size());

        for (int i = 0; i < booklib.size(); i++)
            if (booklib.get(i).getpages() == 120)
                booklib.remove(i);

        int sum = 0;
        for (int i = 0; i < booklib.size(); i++) {
            sum = sum + booklib.get(i).getpages();
        }

        System.out.println(sum);
        for (Book books : booklib)
            System.out.println(books);
    }

    public Book(String n, int p) {
        title = n;
        pages = p;
    }

    public int getpages() {

        return pages;
    }

    public String gettitle() {

        return title;
    }

}

2 个答案:

答案 0 :(得分:2)

从你的代码中,有一些错误:

1您声明了一个名为booklib的ArrayList,其中存储了Book对象。

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

不能添加这样的书:

  booklib.add("Book 1", 350);
  booklib.add("Book 2", 72);

应该使用以下方式添加图书

  booklib.add(new Book("Book 1", 350));
  booklib.add(new Book("Book 2", 72));

2如果您想要打印书名

不能使用:

  System.out.println(booklib.gettitle(3));

应该使用以下方式instaed。

  System.out.println(booklib.get(0).gettitle());//Populate the first book's title

3关于for循环及其if条件。

更改

 for(int i=0; i<booklib.size; i++)
    if(booklib[i] == 120)

 for(int i=0; i<booklib.size(); i++)
    if(booklib.get(i).getpages() == 120)

如果从List中删除元素,最好使用iterator instaed。

答案 1 :(得分:1)

您应该.add(new Book("Book 1", 350));,因为ArrayListBook类型参数。

ArrayList<Book> booklib = new ArrayList<Book>();
booklib.add(new Book("Book 1", 350));
booklib.add(new Book("Book 2", 72));

要获得ArrayList使用size()而不是size

的大小
for(int i=0; i<booklib.size; i++)

// instead use the code below

for(int i = 0; i < booklib.size(); i++)

同样在for循环中,如果你希望循环在找到数字后中断,那么就执行此操作(不需要else,还需要getPages()):< / p>

for(int i=0; i<booklib.size; i++)
    if(booklib[i].getPages() == 120) {
        booklib.remove(i);
        break;
    }
}

此外,您应该按照以下方式附上main方法

public static void main(String[] args)
{
    ArrayList<Book> booklib = new ArrayList<Book>();
    booklib.add(new Book("Book 1", 350));
    booklib.add(new Book("Book 2", 72));

    System.out.println(booklib.gettitle(3));
    System.out.println(booklib.size());

    for(int i=0; i<booklib.size; i++) {    // You should have brakets for loops that
        if(booklib[i] == 120)              // have multiple statements. This version
            booklib.remove(i);             // only has one, but your original code 
                                           // had multiple statements
    }
}

您当前拥有Book构造并在main方法中获取方法。那是不是没有

我注意到的最后一件事,gettitles()没有参与。你现在有这个

System.out.println(booklib.gettitle(3));

// Should be something like this

System.out.println(booklib.get(0).gettitle());