2017-09-27 2 views
0

Ich versuche, eine Methode in meinem Code zu erstellen, die durch eine Array-Liste (in meinem Fall customerList, die Customer-Objekte enthält) durchsucht und etwas neues hinzufügen, wenn das etwas nicht gefunden wird die Arraylist ...String-Objekt zu ArrayList hinzufügen

Hier ist, wie ich es eingerichtet haben ....

public class CustomerDatabase { 

    private ArrayList <Customer> customerList = null; 

    public CustomerDatabase() { 
     customerList = new ArrayList<Customer>(); 
    } 

und dies ist die Methode, die ich machen werde versuchen. Ich versuche, es zu bekommen, so dass es einen Kunden mit Vornamen „n“ bis zum Ende des Arraylist hinzufügen, wenn es nicht in der Arraylist gefunden wird ...

public void addCustomer(String n) 
{ 
    for(Customer c:customerList) 
     if (!customerList.contains(n)) 
     customerList.add(n);   
} 

Ich bin mir bewusst, dass etwas stimmt nicht mit dem ganzen .add und dann einer String-Sache, aber ich bin mir nicht sicher, wo ich falsch gelaufen bin. Jede Eingabe wäre großartig!

+0

Du musst wahrscheinlich Ihre eigenen Filter schreiben für jede durch die Liste zu scannen Objekte mit einer passenden Eigenschaft ODER implementieren eine 'contains'-Methode, die einen 'Comparator' verwendet, der verwendet werden kann, um benutzerdefinierte Suche durchzuführen – MadProgrammer

+0

Zerstören Sie nicht Ihre eigene Frage. Wenn du eine andere Frage stellen möchtest, poste sie separat. – shmosel

Antwort

3

Sie verwechseln Ihre Customer Klasse mit ihrer Namenseigenschaft. Sie können nicht überprüfen, ob eine Liste von Custom enthält String, weil es nie wird. Aber Sie können überprüfen, ob Kunden in der Liste die gesuchte Eigenschaft haben. Wenn Sie eine nicht finden, dann müssen Sie mit dieser Zeichenfolge ein neues Objekt konstruieren:

public void addCustomer(String name) { 
    for (Customer c : customerList) { 
     if (c.getName().equals(name)) { 
      // duplicate found 
      return; 
     } 
    } 
    // no duplicates; add new customer 
    customerList.add(new Customer(name)); 
} 

Dies setzt voraus, Customer hat einen Konstruktor Customer(String name) und ein Verfahren String getName(). Bei Bedarf anpassen.

+0

Alternativ ist vielleicht eine Karte eine bessere Lösung –

+0

@ScaryWombat Yup, gibt es viele Alternativen. Ich habe versucht, mit dem beabsichtigten Ansatz von OP zu arbeiten. – shmosel

+0

@ D.Hoffman Gern geschehen. Versuchen Sie in Zukunft, alle relevanten Informationen wie Fehlermeldungen und Klassenstruktur in Ihre Frage einzubeziehen, damit wir nicht raten müssen. – shmosel

0

Der Kunde ist eine Klasse und Sie haben eine Array-Liste des Customer-Class-Typs erstellt. Es gibt keine direkte Möglichkeit, den Namen (String) mit dem Customer-Klassenobjekt zu vergleichen.

Sie sollten Ihren Code ändern, wie-

public void addCustomer(String name) { 
for (Customer c : customerList) { 
    if (!c.getName().equals(name)) { 
     Customer c=new Customer(); 
     c.setName(name); 
     customerList.add(c); 
    } 
} 

}

Und in Kunden Klasse

Class Customer{ 
private String name; 
//getter and setter method for name. 
} 
Verwandte Themen