【发布时间】: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”。
-
由于您使用
contains和remove的不同值,这是第一个问题。此外,如果您也调用了这些方法,则应使用indexOf而不是contains并使用索引到remove特定值。最后,您需要显示使用Book.equal才能看到contains或indexOf应该如何匹配这些(但由于您使用String,这也不是一个好的开始。