2017-09-13 19 views
1

私はArraylistの特定の行を削除する方法を理解しようとしています。しかし、それは私のどこにでもそのID番号を見つけることができないようですArraylistユーザー入力を使用してArrayList内の特定の行を削除する方法

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

ブックリスト


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)); 
     } 
    } 
は、テキストファイルを読み、文字列として出てくるのArrayListです。私のテキストファイル内の行のようになります。

B998 ; Aithiopika ; Heliodorus ; 1829 

しかし「998」でユーザータイプであれば、それはのArrayListからこの行を削除しません。どのように私はこれを行うに行くことができるかについての任意のアイデア?イテレータはやや助けになるだろうか?

EDIT:これは、最初に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())); 
    } 
+0

ここには多くの潜在的な原因があります。あなたはあなたのArrayListを見せてもらえますか?追加する前にIDから 'B'を削除しますか?それを 'Integer'として追加しますか? – Zircon

+0

このIDが複数存在する可能性はありますか? javadocが示すように "public boolean remove(Object o) **存在する場合、指定された要素の最初のオカレンス**をこのリストから削除します**リストに要素が含まれていない場合は変更されません。だから、あなたはあなたがそれを削除しようとする前にリスト内でそれを見つけることができるかどうかをチェックすることから始めるべきです。 – kazu

+0

[ArrayList に文字列の一部が含まれているかどうかを確認](https://stackoverflow.com/questions/6428005/check-if-arrayliststring-contains-part-of-a-string)またはhttps:// stackoverflow .com/questions/8192665/how-to-a-string-in-an-arraylistまたはhttps://stackoverflow.com/questions/6645379/partially-match-strings-in-case-of-list -containsstring – Tom

答えて

0

あなたはあなたのコードで複数の問題を抱えています。リストからブックオブジェクトを削除するかどうかは、何を達成しようとしているのか明確ではありません。そうなら、あなたはあなたのBookクラスは、以下のようなものであると仮定すると、ブックオブジェクトの(イテレータを使用して)IDフィールドを比較する必要があります。

class Book { 
    int id; 

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

上記の場合は、シナリオでない場合は、あなたのリストは、その後、BookオブジェクトのリストですremoveメソッドのパラメータとしてStringを渡すにはどうすればいいですか?bookList.remove("B"+Integer.valueOf(idNum)); ここにブックオブジェクトまたはインデックス番号を渡す必要があります。

関連する問題