【问题标题】:How to remove a specific line in an ArrayList using user input如何使用用户输入删除 ArrayList 中的特定行
【发布时间】:2018-02-22 06:39:27
【问题描述】:

我试图弄清楚当用户输入图书 ID 号时如何删除我的 Arraylist 中的特定行。但是,它似乎在我的 Arraylist 中的任何地方都找不到该 ID。

private void removeBook() 
    // Removes a certain book from the Book List.
    {
        Scanner IDS = setbookID();
        int idNum = IDS.nextInt();
        if(bookList.contains(idNum)){ //problem
            bookList.remove("B"+Integer.valueOf(idNum));
        }
    }

private Scanner setbookID(){
    Scanner bookID = new Scanner(System.in);
    System.out.println("Enter your book's ID number. ");
    return bookID;}

bookList 是一个 ArrayList,它读取一个文本文件并以字符串形式出现。我的文本文件中的一行如下所示:

B998 ; Aithiopika ; Heliodorus ; 1829

但是,如果用户键入 "998",它不会从 ArrayList 中删除这一行。关于我如何去做这件事的任何想法?迭代器会有所帮助吗?

编辑:这就是我最初将书籍添加到 ArrayList 的方式。

private ArrayList<Book> readBooks(String filename) {
        ArrayList<Book> lines = new ArrayList<>();
        readTextFileB(filename, lines);
        return lines; 
    }

private void readTextFileB(String filename, ArrayList<Book> lines) 
    // Reads the books.txt file.
    {
        Scanner s = null;
        File infile = new File(filename);
        try{
            FileInputStream fis = new FileInputStream(infile);
            s = new Scanner(fis);
        } catch (FileNotFoundException e){
            e.printStackTrace();
        }
        while(s.hasNextLine())
            lines.add(new Book(s.nextLine()));
    }

【问题讨论】:

  • 这里有很多潜在的原因。你能展示你的 ArrayList 以及你是如何用书籍填充它的吗?在添加之前,您是否从 ID 中删除了“B”?您是否将其添加为Integer
  • 这个ID有没有可能多次出现?正如 javadoc 所说,“public boolean remove(Object o) 从该列表中删除 第一次出现的指定元素(如果存在)。如果列表不包含该元素,则它保持不变。”。因此,您应该首先检查只有一次出现,以及在尝试删除它之前是否可以在列表中找到它。
  • @Zircon 我编辑了问题并添加了我如何阅读这些行。我将 ID 添加为整数,然后在将整行转换为字符串时在该整数之前添加“B”。
  • 由于您使用 containsremove 的不同值,这是第一个问题。此外,如果您也调用了这些方法,则应使用 indexOf 而不是 contains 并使用索引到 remove 特定值。最后,您需要显示使用 Book.equal 才能看到 containsindexOf 应该如何匹配这些(但由于您使用 String,这也不是一个好的开始。

标签: java arraylist


【解决方案1】:

您的代码存在多个问题。不清楚您是否要从列表中删除 Book 对象。如果是这样,那么您需要比较 book 对象的 ID 字段(使用迭代器),假设您的 Book 类如下所示:

    class Book {
    int id;

    Book(int id) {
        this.id = id;
    }
}

如果上述情况不是这种情况,那么您的列表是 Book 对象的列表,那么您如何将 String 作为参数传递给 remove 方法 bookList.remove("B"+Integer.valueOf(idNum)); 您应该在此处传递 Book 对象或索引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-23
    • 2023-03-19
    • 2017-01-11
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多