2017-01-29 19 views
0

ここではJavaで新しいので、配列の周りに頭を浮かべることはできません。私はArrayListからアイテムを削除する必要があります。実際にこれをコード化する方法は分かりません。私のプログラムは.csvファイルを読み込み、メインクラスから2番目のクラスに文字列を渡します。その2番目のクラスでは、配列リストを検索してその文字列を削除し、それが削除されたというtrueを返します。どんな助けもありがとうございます。ArrayListからオブジェクトを削除します

セカンドクラス

public class PersonLogImpl { 

private boolean remove; 
private boolean isLicenseUnique; 
private boolean add; 
private final ArrayList<Person> person; 

public PersonLogImpl() { 
    this.person = new ArrayList<>(); 
} 


public ArrayList<Person> getPersonLog(){ 
    return Person; 
} 

public boolean add(Person obj){ //add person object to ordered list 
    person.add(obj); 

    return add; 
} 

public boolean remove (String license){ //remove person with specific license from list 

    if(person.remove(person.equals(add))){ 
      remove = true; 
    } 
    return remove; 
} 

EDIT: 人クラス

public class Person{ 
private String licenseNumber; 

public Person(){ 

} 

public Person(String licenseNumber){ 
    this.licenseNumber = licenseNumber; 
} 

public String getLicenseNumber(){ 
    return licenseNumber; 
} 

public void setLicenseNumber(String licenseNumber){ 
    this.licenseNumber = licenseNumber; 
} 

@Override 
public int hashCode(){ 
    int hash = 7; 
    return hash; 
} 

@Override 
public boolean equals(Object obj){ 
    if (this == obj){ 
     return true; 
    } 
    if (obj == null){ 
     return false; 
    } 
    if (getClass() != obj.getClass()){ 
     return false; 
    } 
    final Person other = (Person) obj; 
    if (!Objects.equals(this.licenseNumber, other.licenseNumber)){ 
     return false; 
    } 
    return true; 
} 

@Override 
public String toString(){ 
    return "Person{" + "licenseNumber=" + licenseNumber + '}'; 
} 

public boolean validateLicense(){ 
    boolean retValue = false; 
    if ((this.licenseNumber.matches("^[a-zA-Z]{2}\\d{7}$"))) 
     retValue = true; 
    return retValue; 
} 
+0

は、私はあなたが 'person.equals(追加)'の意味は何例えば実装 –

+1

に問題があると思いますか? 'オブジェクト'と 'ブール値'を比較しますか? –

+0

person.equals(add)は、追加された場合にtrueを返すと仮定します。 – Newb2Java

答えて

1

これを試してください:あなたはまだ1を持っていない場合

public boolean remove (String license){ //remove person with specific license from list 
    Iterator<Person> personIterator = person.iterator(); 
    boolean remove = false; 

    while(personIterator.hasNext(){ 
     Person personInstance = personIterator.next(); 
     if(personInstance.getLicense().equals(license))){ 
      personIterator.remove(); 
      remove = true; 
      break; 
     } 
    } 

    return remove; 
} 
+0

このコードには構文エラーがあります。また、 'Person'クラスに' getLicense(String license) 'メソッドがあることをどうお知りになりますか? OPは彼らの質問に 'Person'クラスを提供していません。 –

+0

申し訳ありませんが急いで..文法を更新しました.. btw取得する方法の名前は何であり、ライセンスを比較する..アルゴリズムは動作します..たとえそのequals .. ..私はOPが推論するのに十分なインテリジェントであると仮定。 –

+0

'person'は' ArrayList '型であるので、すでに' getLicense'メソッドを持っていないことを知っています。 –

0

、上の方法getLicense()を作成し、あなたのPersonクラス。そのメソッドは人のライセンスを返す必要がありますし、次にremoveメソッドを使用することができます。

EDIT:あなたのPersonクラスにgetLicenseNumber()メソッドがあることを確認しました。

public boolean remove(String license) { 
    for (Person individual : person) { // go through each Person on the ArrayList 
     if (individual.getLicenseNumber().equals(license)) // check if that Person's license is equal to the license we're looking for 
      return person.remove(individual); // if so, remove that person and return true (remove will return true if the element is found) 
    } 

    return false; // if we never removed any element we never found a person with that license. In that case, return false 
} 

私は一人一人が独自のライセンス番号を持っていることを前提としていて、あなたはArrayListに二度同じ人を追加しません(あるいはしようとしてからユーザーを停止します)という。あなたの願いは、そのライセンスを持つ人の任意の発生を削除する場合 は、次のような方法で使用できます。あなたはもっと簡単な解決策が必要な場合

public boolean remove(String license) { 
    int listsize = person.size(); // size before removing any 
    for(int i=0; i<person.size(); i++) { 
     if (person.get(i).getLicenseNumber().equals(license)) 
      person.remove(i--); // i-- is required because the list size will change if we remove from it, so we need to decrement i 
    } 

    return !(listsize == person.size()); // if the size before is equal to the size now, we never removed any and thus return false 
} 

を、あなたはあなたが持っているmethod removeAll from ArrayList class

+0

arraylistには値が格納されているため、getLicense()が必要なので、それを削除できますか? – Harry

+0

@Harry 'ArrayList'は' String'オブジェクトではなく 'Person'オブジェクトを含んでいます。 –

+2

ArrayListの型はPersonでString型ではありません(もしそうだったら、単にperson.remove(license);を返すことができます)。 ArrayListから直接削除しますが、opがPersonクラスをポストしていないので、どのクラスがベストであるかを判断できません。 –

0

に見ることができますあなたのコード内のいくつかのエラーは、私は以下のコメントでそれらを強調しました:任意のオブジェクトとこの場合personには、

public class PersonLogImpl { 
    private boolean remove; 
    private boolean isLicenseUnique; 
    private boolean add; 
    private final ArrayList<Person> person; 

    public PersonLogImpl() { 
     // YOU SHOULD ALSO ASSIGN THE PRIVATE BOOLEANS HERE 
     this.person = new ArrayList<>(); 
    } 

    public ArrayList<Person> getPersonLog() { 

     return Person; // What's going on here? 
     // You're returning the actual Person class when you should be returning 
     // an ArrayList of type Person (I think you meant for the P to be lowercase) 
    } 

    public boolean add(Person obj){ //add person object to ordered list 
     person.add(obj); 

     return add; // You never assign true or false to 'add' (I believe 
     // it defaults to true) so this method will always return true (maybe 
     // false, not sure). you should instead use 'return person.add(obj);' 
    } 

    public boolean remove (String license){ //remove person with specific license from list 

     // The code below makes no sense (no offence). 
     if(person.remove(person.equals(add))){ 
       remove = true; 
     } 
     return remove; 

     // Since I don't know the make up of the 'Person' class I can't 
     // tell you how this method should function. I'll make a guess though: 
     for(int i = 0; i < person.size(); ++i) { 
      if(person.get(i).getLicenseNumber().equals(license)) { 
       return person.remove(i); 
      } 
     } 

     // OR a shorter alternative 
     return person.remove(new Person(license)); 
    } 

} 
+0

ライセンス番号を扱う人のクラスのビットで追加しました – Newb2Java

+0

@ Newb2Javaが私の答えを更新しました。 –

0

Newb2Java @、equals方法を比較することができますが、Aの場合rgument(addここ)は、呼び出し元のタイプ(person)とは異なるタイプです。結果はfalseです。単数名詞personを使用しましたが、そのタイプは複数、Personのコレクションです。 ArrayList<Person>は、Booleanbooleanも)と決して等しくありません。 Listメソッドaddは、trueを返します。 removeは、実際に引数を削除した場合はtrueを返します。引数はPersonである必要があります。まず、リスト内のどの要素が指定された属性値を持つかを調べる必要があります。だから、指定された要素の各インスタンスが指定されたLicenseを見つけるまで、イテレータを使ってリストを繰り返し処理する必要があります。このような何か:これで

package practice; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.ListIterator; 

public class Personator { 
    private final List<Person> persons = new ArrayList<>(); 

    public List<Person> getPersons() { 
    return new ArrayList<>(persons); 
    } 

    public boolean add(Person person) { 
    return persons.add(person); 
    } 

    public boolean remove(String license) { 
    return remove(new Person(license)); 
    } 

    public boolean remove(Person removal) { 
    boolean wasRemoved = false; 
    for (ListIterator<Person> iterator = persons.listIterator(persons.size()); 
     iterator.hasPrevious(); 
     ) { 
     final Person person = iterator.previous(); 
     if (removal.equals(person)) { 
     iterator.remove(); 
     wasRemoved = true; 
     } 
    } 
    return wasRemoved; 
    } 
} 

public class Person { 
    private final String license; 

    public Person(String license) { 
    if (license == null) { 
     throw new IllegalArgumentException("null license not allowed"); 
    } 
    this.license = license; 
    } 

    public String getLicense() { 
    return license; 
    } 

    @Override 
    public String toString() { 
    return "Person " + getLicense(); 
    } 

    @Override 
    public int hashCode() { 
    return getLicense().hashCode(); 
    } 

    @Override public boolean equals(Object oth) { 
    if (this == oth) { 
     return true; 
    } 
    if (! (oth instanceof Person)) { 
     return false; 
    } 
    Person other = (Person) oth; 
    return this.getLicense().equals(other.getLicense()); 
    } 
} 
関連する問題