2016-07-20 3 views
0

Я новичок в Java. Я пытаюсь проверить список объектов в списке массивов.Подтвердить список объектов в arraylist

Например,

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) 

Я хочу добавить еще один объект автомобиль с «Hyundai», но если мой список уже содержит его, я хотел бы изменить свое имя Hyundai1, а затем добавить в список.

Я пытался использовать,

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"); 
} 

Примечание: Я жёстко значение "Hyundai" здесь для его упрощения. Просьба предложить

+0

Вы можете переопределить 'equals' в' Car', а затем проверить 'name' (и только' name'). Затем дайте ему конструктор, который берет «имя». Наконец, вы можете сказать «if (al.contains (new Car (« Hyundai »)) –

+0

Что мне следует сравнивать в методе equals. Это OBject Car с именем? – craig

+0

BTW не должно быть' car.setName («Hyundai») 'не' cars.set .... ' – SomeDude

ответ

1

Как Эллиот Отдается:

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

Есть несколько проблем с вашим кодом:

  1. класс должен быть написан строчными в Java.
  2. После объявления class нет (), это в основном для методов.
  3. Ваш class кажется абстракцией автомобиля, поэтому я бы назвал его Car вместо Cars.
  4. Если вы создадите объект и дважды вызовите сеттер, первое значение будет перезаписано. Вы, вероятно, хотели создать два объекта и соответственно установить каждое значение.
  5. Вы проверяете имя автомобиля внутри цикла, но вызываете свои действия за пределы цикла. Ваша локальная переменная value не будет видна там, и если бы она была, она имела бы значение последнего автомобиля в list. Поэтому вы, вероятно, хотите действовать внутри цикла.
0

Глядя на код, который вы написали, я считаю, что следующий может быть то, что вы пытаетесь сделать:

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); 
    } 
} 

Если вы не уверены в какой-либо части кода, не стесняйтесь указать на это , Надеюсь это поможет.

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