2016-03-06 3 views
0

Je crée une classe appelée Car avec une méthode appelée TotalPrice qui prendra un tableau de Car s et calculera le total de la liste. J'ai mis en œuvre une méthode client totalPrice, qui accepte une liste (ArrayUnsortedList carList) de voitures et renvoie un nombre entier égal au coût total des voitures sur la liste.Comment puis-je obtenir le prix total de ma carList?

Je suis bloqué sur l'écriture du pilote de test afin que je puisse tester mon vrai programme de classe Car.

Voici mon code pour la classe Car:

public class Car 
{ 
    int year; 
    String make; 
    String model; 
    int price; 

    public Car(int year, String make, String model, int price) { 
     this.year = year; 
     this.make = make; 
     this.model = model; 
     this.price = price;  
    } 

    public int getYear() { 
     return this.year; 
    } 

    public String getMake() { 
     return make; 
    } 

    public String getModel() { 
     return model; 
    } 

    public int getPrice() { 
     return this.price; 
    } 

    public static int totalPrice(ArrayUnsortedList carList) { 
     int totalPrice = 0; 
     for(int i=carList.size(); i>0; i--) 
     { 

     totalPrice += ((Car)carList.getNext()).getPrice(); 
     } 
     return totalPrice; 
    }  
} 

Voilà ma classe d'essai routier:

import java.util.Scanner; 
import java.util.ArrayList; 

public class CarList{ 

    public static void main (String [] args) { 

     ArrayUnsortedList<Car> carList = new ArrayUnsortedList<Car>(); 
     Car car1, car2; 

     car1 = new Car(2016, "BMW", "M4", 65700); 
     carList.add(car1);  
     car1 = new Car(2016, "Mercedes-Benz", "C300", 38950); 
     carList.add(car1);  
     car2 = new Car(2016, "Lexus", "GS F", 84440); 
     carList.add(car2); 

     System.out.println(Car.totalPrice(carList)); 

    } 

} 

MISE À JOUR ********

Je dois utiliser ArrayUnsortedList qui est donné.

Voici le reste des codes: GITHUB

MISE À JOUR Maintenant, je reçois le mauvais TotalPrice?

65700 + 38950 + 84440 = 189090

Mais je reçois 253320 ???

----jGRASP exec: java CarList 

253320 

----jGRASP: operation complete. 
+1

'Car.totalPrice (carList)'? – skypjack

+0

@skypjack Je ne peux pas l'utiliser car il est incompatible avec mon ArrayUnsortedList – pyuntae

+0

Eh bien, construisez un 'ArrayUnsortedList' de l'autre liste ou définissez un constructeur qui accepte une liste générique, puis utilisez-le. – skypjack

Répondre

1

Pour le code de la fonction totalPrice elle-même, j'utiliserais ArrayUnsortedList.size() et ArrayUnsortedList.getNext() pour parcourir le contenu de la liste. Cette liste api est terrible (intentionnellement, je suppose) et c'est compréhensible tu as eu un peu de difficultés ici. Apprenez à parcourir rapidement une classe Java, en regardant uniquement les en-têtes de fonctions pour déterminer quelle fonction peut être utile.

int totalPrice = 0; 
for(int i=carList.size(); i>0; i--) 
{ 
    totalPrice += carList.getNext().getPrice(); 
} 
return totalPrice; 

Vous remarquerez que je ne fait pas référence à i dans la boucle; c'est parce qu'il n'y a aucune méthode de ArrayUnsortedList qui attend un index. Donc, je me fie simplement sur i pour m'assurer que je fais le bon nombre d'appels à ArrayUnsortedList.getNext().

Sur d'autres sujets,

  • Je ne pense pas que ce soit le travail de la classe de voiture pour résumer le prix des voitures. totalPrice doit être implémenté en tant que fonction sur le ArrayUnsortedList ou simplement exécuté tel quel dans votre classe de test.

  • Je pense que les tests dans l'environnement Java devraient être exécutés avec JUnit.Cela pourrait être un sujet que vous rencontrerez bientôt, mais si vous avez déjà travaillé avec JUnit, alors votre coureur de test devrait l'utiliser.

+0

Si je le change à ce que vous avez posté, j'obtiens une erreur 'Car.java:35: erreur: ne peut pas trouver le symbole' – pyuntae

+0

Il semble que votre fonction ou bloc de code accepte actuellement ArrayUnsortedList non typé. Vous devez soit changer la signature pour n'accepter que 'ArrayUnsortedList ', donc le 'carList.getNext()' renvoie naturellement un 'Car' sur lequel vous pouvez appeler' .getPrice() ', ou utiliser un cast dans la boucle:' ((Car) carList.getNext()). GetPrice() ' – Aaron

+0

Si vous regardez l'erreur que vous avez collée dans votre question, vous pouvez voir Java essayant de trouver une fonction' getPrice() 'sur la classe' Object', tandis que il devrait être le chercher sur la classe 'Car' – Aaron

0

Dans votre méthode principale, vous pouvez ajouter des voitures au type de données donné (ArrayUnsortedList) lui-même. Ensuite, vous pouvez directement le transmettre à votre méthode statique.

Une autre alternative consiste à définir un constructeur pour ArrayUnsortedList à prendre dans une ArrayList et créer sa propre instance avec les éléments appropriés.