簡體   English   中英

我在這個ArrayList中做錯了什么?

[英]What am I doing wrong in this 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.

編輯:非常感謝! 我已經修復,完善並幾乎完成了我的代碼。 唯一的問題是我想使用增強的for循環輸出當前書籍的最后一部分。 每當我這樣做時,我都會得到奇怪的數字。 包裝書;

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

}

從您的代碼中,有一些錯誤:

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));

應該使用以下方式安裝。

  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中刪除元素,則最好使用instaed迭代器。

您應該.add(new Book("Book 1", 350)); 因為ArrayList具有Book類型參數。

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() ):

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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM