从arrayList中删除对象并打印出剩余的对象

时间:2018-08-05 16:01:30

标签: java arraylist

我有一个代码,可以在arraylist中存储书籍的数量,每当借阅一本书时,都会提示用户输入一个从零开始的数字,该数字代表第一本书,第二个数字是1,依此类推。它首先运行,从arraylist中删除第一个对象,然后到达最后一个,它抛出IndexOutOfBoundException,这是我的代码块,请帮忙!

  //class doesn't do much than just gets the title of the book
 public class BookLibrary {
  String title;

 public BookLibrary(){}

public void setTitle( String names) {
    title = names;
}

public String getTitle(){
    return title;
}
}

这是我的代码,用于从arraylist中删除对象      公共类LibraryAssistant {

 ArrayList<BookLibrary> booklib = new ArrayList<>();
 int numOfBooks = 0;

 public void setupLibrary(){
    BookLibrary bc = new BookLibrary();
    bc.setTitle("fantastic beasts and where to find them");
    BookLibrary bc1 = new BookLibrary();
    bc1.setTitle("Harry potter and the prisoner of azkabans");
    BookLibrary bc2 = new BookLibrary();
    bc2.setTitle("one day for the thief");
    booklib.add(bc);
    booklib.add(bc1);
    booklib.add(bc2);
    numOfBooks++;

    for(BookLibrary book : booklib){
       System.out.println(book.getTitle());

    }
}

public void borrowbook(){
    while(!booklib.isEmpty()){
        String getbooknum = userInput("please enter a book number of the             book you want to borrow");
        int index = Integer.parseInt(getbooknum);
        if(index>=0){
            booklib.remove(index);
            for(BookLibrary lb : booklib){
                System.out.println(lb.getTitle());
            }
        }
        numOfBooks--;
    } if(booklib.isEmpty()){
        System.out.println("the library is empty");
    }
}

2 个答案:

答案 0 :(得分:1)

IndexOutOfBoundException背后的原因是每次删除对象时arraylist的大小都会减小。因此,如果您从书中删除第一个标题(索引0),则列表的大小将为2。当用户进行第二次删除(索引1)时,它将正常工作。但是,当用户要进行第三次移除(索引2)时,由于ArrayList的大小现在为1,它将抛出IndexOutOfBoundException。

答案 1 :(得分:0)

我的第一个观察结果是setUpLibrary()中的numOfBooks应该设置为3,或者应该更新为数组列表的大小。 第二个观察结果是在borrowbook()中,while循环运行直到bookLib为空。因此,行booklib.remove(index);没有更多元素或用户指定的数字超出范围时,将抛出错误IndexOutOfBoundsException。

请参考以下文档: https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#remove(int)