2017-02-02 6 views
0

Я пытаюсь написать простую программу, в которой вы будете «собирать» разные объекты с точками, которые дают своего рода оценку. Например, «Porsche» получит точку, определенную пользователем, и если вы введете новую точку, эта точка будет добавлена ​​к старому значению. Так что скажем, что вы даете «Porsche» 100 очков, а затем добавляете 50, общее количество очков должно составлять 150. Программа также должна хранить общее количество очков для разных автомобилей (поэтому, если я добавлю BMW с 100 очками, общее количество должно быть 250 (150 баллов приходится на Porsche)).Добавление точек к объекту без перезаписи существующих точек

Во-первых, я просматриваю свой ArrayList для автомобиля, но затем, когда я пытаюсь добавить новый балл, он просто перезаписывает существующее новое значение.

System.out.println("The name of the car: "); 
    String carName = readString(); 
    Car car = findCar(carName); 

    if(car == null){ 
     System.out.println("Car doesn't exist!"); 
     return; 
    } 

    System.out.println("Add more points for the car: "); 
    car.setPoints(readInt()); 
    carlist.add(car); 

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

readInt() и ReadString() это просто методы для моих сканеров

+0

'car.setPoints (car.getPoints() + readInt());'? – IQV

+0

или просто создать метод 'addPoint (int)', это не запрещено, getter и setter являются стандартными, но вы можете создавать другие методы. – AxelH

+0

@IQV Спасибо большое! Ха-ха ... о человек, я бы хотел, чтобы я подумал об этом ... Последующие действия - похоже, я создаю дубликаты одного и того же автомобиля. Оценка обновляется, как следует, но если я добавлю 50, то 100 на тот же объект, я теперь получаю 3 одинаковых автомобиля, но с одинаковой суммой. Что необходимо для того, чтобы оценка была добавлена ​​только на тот же объект? – zkulltrail

ответ

3

You здесь есть сеттер, по определению он заменяет значение.

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

Я использую простой синтаксис для числового поля (довольно стандартный тоже):

public void addPoint(int points){ 
    this.points += points; 
} 

Вы можете сделать некоторые проверки здесь, если вы хотите, отказываясь отрицательные значения или что-нибудь еще.

EDIT: для второй задачи (это должно быть другой вопрос, но это небольшая ошибка)

Вы получаете экземпляр с Car car = findCar(carName); и ничего не делать, если он является недействительным. Но после того, как вы добавите несколько баллов, вы получите carlist.add(car);, поэтому, если вы не удалили его с findCar, вы добавите тот же экземпляр в этот список.

+0

Спасибо большое! Ха-ха ... о человек, я бы хотел, чтобы я подумал об этом ... Дублированный ответ от другого ответа: Последующие действия - похоже, я создаю дубликаты того же автомобиля. Оценка обновляется, как следует, но если я добавлю 50, то 100 на тот же объект, я теперь получаю 3 одинаковых автомобиля, но с одинаковой суммой. Что необходимо для того, чтобы оценка была добавлена ​​только на тот же объект? – zkulltrail

+0

@zkulltrail Это другая проблема, но поскольку вы добавляете машину после обновления, это кажется логикой;) Вы могли бы просто добавить новый экземпляр, если findCar возвращает null (вместо выхода из метода с возвратом) – AxelH

+0

Еще раз спасибо!Извините за весь дубликат ответа, все еще продолжая этот сайт :) Он работал, просто удалив carlist.add (car); Cheers mate! – zkulltrail

0

Добавить метод в Car классе:

public int getPoints(){ 
    return points; 
} 

Затем замените инкремента-вызов:

System.out.println("Add more points for the car: "); 
car.setPoints(car.getPoints()+readInt()); 
Смежные вопросы