2015-11-10 5 views
1

Как указано в названии, как я могу удалить атрибут из arrayList, мой метод таков:Удалить атрибут из ArrayList()

public boolean removeBorrower(String libraryNumber) 

Я в принципе должны проверить, если параметры в этом метод равен атрибуту, если да, тогда удалите заемщика в соответствии с этим.

Вот мой код:

import java.util.*; 
/** 
* Write a description of class BorrowerList here. 
* 
* @author xxxxxx 
* @version 08/11/2015 
*/ 
public class BorrowerList 
{ 
    private ArrayList<Borrower> borrowers; 

    public BorrowerList() 
    { 
     borrowers = new ArrayList<Borrower>(); 
    } 

    public void addBorrowers(Borrower borrower) 
    { 
     borrowers.add(borrower); 
    } 

    public void getAllBorrowers() 
    { 
     for(Borrower borrower : borrowers) 
     { 
      borrower.printBorrowerDetails(); 
     } 
    } 

    public void getBorrower(int borrowerEntry) 
    { 
     if(borrowerEntry < 0) 
     { 
      System.out.println("Negative entry :" + borrowerEntry); 
     } 
     else if(borrowerEntry < getNumberOfBorrowers()) 
     { 
      Borrower borrower = borrowers.get(borrowerEntry); 
      borrower.printBorrowerDetails(); 
     } 
     else 
     { 
      System.out.println("No such entry :" + borrowerEntry); 
     } 
    } 

    public int getNumberOfBorrowers() 
    { 
     return borrowers.size(); 
    } 

    public void removeBorrower(int borrowerEntry) 
    { 
     if(borrowerEntry < 0) 
     { 
      System.out.println("Negative entry :" + borrowerEntry); 
     } 
     else if(borrowerEntry < getNumberOfBorrowers()) 
     { 
      borrowers.remove(borrowerEntry); 
     } 
     else 
     { 
      System.out.println("No such entry :" + borrowerEntry); 
     } 
    } 

    public boolean removeBorrower(String libraryNumber) 
    { 
     borrowers.remove(libraryNumber); 
    } 

    public int search(String libraryNumber) 
    { 
     int index = 0; 
     boolean found = false; 
     while(index < borrowers.size() && !found) 
     { 
      Borrower borrower = borrowers.get(index); 
      if(borrower.getLibraryNumber().equals(libraryNumber)) 
      { 
       found = true; 
      } 
      else 
      { 
       index++; 
      } 
     } 
     if (index < borrowers.size()) 
     { 
      return index; 
     } 
     else 
     { 
      return -1; 
     } 
    } 
} 

Отредактировано:

Вот код самого

/** 
* Write a description of class Borrower here. 
* 
* @author xxxxxx 
* @version 08/11/2015 
*/ 
public class Borrower 
{ 
    private String firstName; 
    private String lastName; 
    private String libraryNumber; 
    private int noOfBooks; 
    private Address address; 

    /** 
    * Constructor for objects of class Borrower. 
    * The number of books should be set to 1. 
    * 
    * @param firstName The Borrower's first name 
    * @param lastName The Borrower's last name 
    * @param lNumber The Borrower's library number 
    * @param street The Borrower's street 
    * @param town The Borrower's town 
    * @param postcode The Borrower's postcode 
    */ 
    public Borrower(String fName, String lName, String lNumber, 
       String street, String town, String postcode) 
    { 
     firstName = fName; 
     lastName = lName; 
     libraryNumber = lNumber; 
     noOfBooks = 1;   
     address = new Address(street, town, postcode); 
    } 

    /** 
    * Constructor for objects of class Borrower. 
    * The number of books on loan should should be set to 
    * the supplied vale. 
    * 
    * @param fName The Borrower's first name 
    * @param lName The Borrower's last name 
    * @param lNumber The Borrower's library number 
    * @param numberOfBooks The initial book borrow 
    * @param street The Borrower's street 
    * @param town The Borrower's town 
    * @param postcode The Borrower's postcode 
    */ 
    public Borrower(String fName, String lName, String lNumber, int  numberOfBooks, 
       String street, String town, String postcode) 
    { 
     firstName = fName; 
     lastName = lName; 
     libraryNumber = lNumber; 
     noOfBooks = numberOfBooks;   
     address = new Address(street, town, postcode); 
    } 


    /** 
    * Get the Borrower's first name 
    * 
    * @return the Borrower's first name 
    */ 
    public String getFirstName() 
    { 
     return firstName; 
    } 

    /** 
    * Get the Borrower's last name 
    * 
    * @return the Borrower's last name 
    */ 
    public String getLastName() 
    { 
     return lastName; 
    } 

    /** 
    * Get the Borrower's library Number 
    * 
    * @return the Borrower's library number 
    */ 
    public String getLibraryNumber() 
    { 
     return libraryNumber; 
    } 

    /** 
    * Get the number of books on loan 
    * 
    * @return the number of books on loan 
    */ 
    public int getNoOfBooks() 
    { 
     return noOfBooks; 
    } 

    /** 
    * Print out the Borrower's details to the console window 
    * 
    */ 
    public void printBorrowerDetails() 
    { 
     System.out.println(firstName + " " + lastName 
         + "\n" + address.getFullAddress() 
         + "\nLibrary Number: " + libraryNumber 
         + "\nNumber of loans: " + noOfBooks); 
    }  



    /** 
    * Increase the bumber of books on loan by 1 
    * 
    */ 
    public void borrowBook() 
    { 
     noOfBooks = noOfBooks + 1; 
     System.out.println("Books on loan: " + noOfBooks);   
    } 

    /** 
    * Increase the bumber of books on loan by a given number 
    * 
    * @param number of new loans to add to total 
    */ 
    public void borrowBooks(int number) 
    { 
     noOfBooks = noOfBooks + number; 
     System.out.println("Books on loan: " + noOfBooks);   
    } 

    /** 
    * Return a book 
    * 
    */ 
    public void returnBook() 
    { 
     noOfBooks = noOfBooks - 1 ; 
     System.out.println("Books on loan: " + noOfBooks);   
    } 

    /** 
    * Return the Borrower's address 
    * 
    * @return the Borrower's address 
    */ 
    public String getAddress() 
    { 
     return address.getFullAddress(); 
    } 

    /** 
    * Change the Borrower's address 
    * 
    * @param street the street 
    * @param town the town 
    * @param postcode the postcode 
    */ 
    public void setAddress(String street, String town, String postcode) 
    { 
     address.setFullAddress(street, town, postcode); 
    } 

    /** 
    * Print out Borrower's address 
    */ 
    public void printAddress() 
    { 
     address.printAddress(); 
    } 

} // end class 
+0

Следующая ссылка будет полезна.[Удалить метод arraylist] (https://stackoverflow.com/questions/8520808/how-to-remove-specific-object-from-arraylist) – Knu8

+0

Не могли бы вы также указать источник класса «Заемщик»? – Shark

+0

Класс заемщика был добавлен Shark – TheHunter

ответ

0
public boolean removeBorrower(String libraryNumber) 
{ 
    boolean retVal = false; 
    if(borrowers.contains(libraryNumber)) 
    { 
     retVal = borrowers.remove(libraryNumber); 
    } 
    return retVal; 
} 

Что-то вроде этого, может быть заемщиком класса? Я знаю, что это длинный окольный способ делать вещи, так как самый простой способ будет

public boolean removeBorrower(String libraryNumber) 
{ 
     return borrowers.remove(libraryNumber); 
} 

Но, возможно, я не совсем понимаю, в чем проблема у вас возникли?

+0

Это не будет работать. Он должен переопределить равные и hashcode – Knu8

+0

Да, я просто перечитал сообщение об открытии и понял, что пользовательский класс «Заемщик», вероятно, не имеет хорошей реализации 'equals()' и впоследствии 'hashCode()' с особое внимание на 'equals()' Не стесняйтесь публиковать лучшую реализацию @ Knu8 – Shark

+0

Добавлен класс заемщика :) – TheHunter

2

В соответствии с JavaDoc:

общественных логической удалить (Объект O)

Удаляет первое вхождение указанного элемента из этого списка, , если он присутствует. Если список не содержит элемент, он равен без изменений. Более формально удаляет элемент с самым низким индексом i таким образом, что (o == null? Get (i) == null: o.equals (get (i))) (если такой элемент существует). Возвращает true, если этот список содержит указанный элемент (или, что то же самое, если этот список изменился в результате вызова ).

Который по существу означает, что borrowers.remove(libraryNumber); будет работать, если и только если у вас есть Borrower объект, который равен этой строке. Если вы не добавили переопределение метода equals в свой класс Borrower, маловероятно, что это когда-либо будет работать. Таким образом, у вас есть два варианта:

  1. переопределять значение equals (и хорошей практике hashcode()) методы в пределах вашего Borrower класса таким образом, что два элемента заемщика считаются равными, если они имеют один и тот же libraryNumber.

  2. Второй вариант будет использовать iterator, чтобы пройти через ваши Borrower элементов, хранящихся в borrower и использовать remove метод итератора удалять объекты, которые имеют одинаковые значения свойства.

Как примечание стороны, хотя первый подход может быть более элегантным для некоторых, осторожность должны быть приняты, поскольку в вашем конкретном случае, Borrower объекты не могут быть равны только потому, что они имеют один и тот же libraryNumber.

Смежные вопросы