2016-07-20 8 views
0

Ich bin neu in Java. Ich versuche, die Liste der Objekte in der Array-Liste zu validieren.Überprüfen Sie die Liste der Objekte in Arraylist

Zum Beispiel

Class Cars() 
{ 
    private String name; 
    private int year; 
} 
Cars car = new Cars(); 
ArrayList<Cars> al = new ArrayList<Cars>(); 
car.setName("Hyundai"); 
car.setYear("2010"); 
car.setName("Maruti"); 
car.setYear("2010"); 
al.add(car) 

ich mit „Hyundai“ ein anderes Auto Objekt hinzufügen möchten, aber wenn meine Liste bereits enthält, wollte ich meinen Namen Hyundai1 ändern und dann zu der Liste hinzufügen.

for(int i=0;i<al.size();i++) 
{ 
    boolean value = al.get(i).getName().contains("Hyundai"); 
} 

if(value) 
{ 
al.setName("Hyundai1"); 
} 

else 
{ 
al.setName("Hyundai"); 
} 

Hinweis

I, zu verwenden versucht: Ich habe den Wert "Hyundai" hier fest einprogrammiert es einfacher zu machen. Mit freundlicher vorschlagen

+0

Sie könnten "gleich" in "Auto" überschreiben, dann testen Sie den 'name' (und nur den' name'). Dann geben Sie ihm einen Konstruktor, der einen 'Namen' nimmt. Schließlich können Sie sagen: 'if (al.contains (neues Auto (" Hyundai "))' –

+0

Was soll ich in der equals-Methode vergleichen? Ist es das OBJEKT-Auto mit dem Namen? – craig

+0

BTW sollte es nicht 'car.setName ("Hyundai") 'nicht' cars.set .... ' – SomeDude

Antwort

1

Als Elliot Empfehlung:

public class Cars { 
    private String name; 
    private int year; 

    public String getName() { 
     return this.name; 
    } 

    @Override 
    public boolean equals(Object other){ 
     if (other == null) return false; 
     if (other == this) return true; 
     if (!(other instanceof Cars)) return false; 
     // Check whether they are equivalent Strings or both null 
     Cars otherCar = (Cars) other; 
     if (this.name == null || otherCar.getName() == null) { 
      return this.name == otherCar.getName(); 
     } else { 
      return this.name.equals(otherCar.getName() 
     } 
    } 

    // If two objects are equal, then they must have the same hash code. 
    @Override 
    public int hashCode() { 
     return this.name.hashCode(); 
    } 
} 
1

ein paar Probleme mit dem Code Es gibt:

  1. Klasse Klein in Java geschrieben werden muss.
  2. Nach einer class Deklaration gibt es keine (), dies ist vor allem für Methoden.
  3. Ihr class scheint die Abstraktion eines Autos zu sein, also würde ich es Car statt Cars nennen.
  4. Wenn Sie ein Objekt erstellen und einen Setter zweimal aufrufen, wird der erste Wert überschrieben. Wahrscheinlich wollten Sie zwei Objekte erstellen und die Werte entsprechend einstellen.
  5. Sie testen den Namen des Autos innerhalb einer Schleife, rufen aber Ihre Aktionen außerhalb der Schleife auf. Ihre lokale Variable value wird dort nicht sichtbar sein und wenn es so wäre, hätte sie den Wert des letzten Autos in der list. Sie möchten wahrscheinlich in der Schleife handeln.
0

auf den Code suchen Sie schrieb, glaube ich, die folgenden sein könnte, was Sie vorhatten:

class Car{ 

    public Car(){ 
     this.createdCarNames = new ArrayList(); 
    } 

    private String name; 
    private String year; 
    private ArrayList<String> createdCarNames; 

    /*The following method sets the name of the new Car object. 
    *It works by iterating over the list of created car names. 
    *If a car name in the list is found to be equal to that which 
    *you are attempting to set, concatenate a '1' to its end 
    *and set the name of the car object. 
    *Else, simply set the name of the Car object. 
    *Lastly, the name is added to the list of created car names. 
    */ 

    public void setName(String name){ 
     for(String carName : createdCarNames){ 
      if(carName.equals(name)) 
       this.name = name.concat("1"); 
      else this.name = name; 
     } 
     createdCarNames.add(name); 
    } 
} 

Wenn Sie sich über einen Teil des Codes nicht sicher sind, es zu zeigen frei fühlen out . Hoffe das hilft.