2017-02-02 1 views
0

J'essaie d'écrire un programme simple où vous allez "collecter" différents objets avec des points qui donnent une sorte de score. Par exemple, une "Porsche" se verra attribuer un point déterminé par l'utilisateur et si vous entrez un nouveau point, ce point sera ajouté à l'ancienne valeur. Alors disons que vous donnez 100 points à Porsche et que vous en ajoutez 50, le total des points devrait être de 150. Le programme devrait également stocker un total de points pour différentes voitures (donc si j'ajoute une BMW avec 100 points, le total devrait être 250 (150 points proviennent de la Porsche)). D'abord, je regarde dans ma ArrayList pour la voiture, mais quand j'essaye d'ajouter une nouvelle partition, elle remplace simplement celle existante avec la nouvelle valeur.Ajouter des points à un objet sans écraser les points existants

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

Je crois qu'il ya un moyen facile de résoudre ce problème, mais maintenant je suis complètement paumé et mes compétences googler ne me donner aucun résultat.

readInt() et readString() est juste méthodes pour mes scanners

+0

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

+0

ou simplement créer une méthode 'addPoint (int)', il n'est pas interdit, getter et setter sont un standard mais vous pouvez créer d'autres méthodes. – AxelH

+0

@IQV Merci beaucoup! Haha ... oh, j'aurais aimé y penser ... Continuez - il semble que je crée des doublons de la même voiture. Le score est mis à jour comme il se doit, mais si j'ajoute 50, puis 100 au même objet, je reçois maintenant 3 des mêmes voitures, mais avec le même total. Qu'est-ce qui est nécessaire pour que le score ne soit ajouté que sur le même objet? – zkulltrail

Répondre

3

Vous avoir un setter ici, par définition il remplace la valeur.

Vous devez créer une méthode simple qui ajoutera une valeur à celle existante.

J'utilise une syntaxe simple pour le champ numérique (assez standard aussi):

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

Vous pouvez faire une vérification ici si vous voulez, de refuser les valeurs négatives ou quoi que ce soit d'autre.

EDIT: pour le deuxième problème (ce qui devrait être une autre question, mais cela est une petite erreur)

vous obtenez l'instance avec Car car = findCar(carName); et ne font rien si elle est nulle. Mais après avoir ajouté quelques points, vous carlist.add(car);, donc sauf si vous l'avez supprimé avec findCar, vous ajoutez la même instance dans cette liste.

+0

Merci beaucoup! Haha ... oh l'homme j'aurais aimé y penser ... Dupliquer la réponse d'une autre réponse: Suivi - il semble que je crée des doublons de la même voiture. Le score est mis à jour comme il se doit, mais si j'ajoute 50, puis 100 au même objet, je reçois maintenant 3 des mêmes voitures, mais avec le même total. Qu'est-ce qui est nécessaire pour que le score ne soit ajouté que sur le même objet? – zkulltrail

+0

@zkulltrail C'est un problème différent mais puisque vous ajoutez la voiture après la mise à jour, cela semble logique;) Vous pouvez simplement ajouter une nouvelle instance si findCar retourne null (au lieu de quitter la méthode avec return) – AxelH

+0

Merci encore!Désolé pour toute la réponse en double, apprenant encore ce site :) Cela a fonctionné en supprimant carlist.add (voiture); Salutations! – zkulltrail

0

Ajouter une méthode dans Car classe:

public int getPoints(){ 
    return points; 
} 

Remplacez ensuite l'incrément d'appel:

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