2009-08-20 8 views
1

Ceci est le devoir, mais j'ai besoin d'un "coup de pouce". Je ne peux pas trouver comment trier par nom.Essayer de comprendre la méthode de tri. Java Homework

Mes questions: (S'il vous plaît garder réponses débutant amical)

  1. Est-ce que regarder à droite ont jusqu'à présent?
  2. Comment faire un tri?
  3. Est-ce que quelqu'un a des recommandations pour optimiser/nettoyer cela?

Voici la mission:

Le point de contrôle qui est dû à la semaine 6 a les exigences suivantes du programme d'inventaire Partie 2:

  1. Modifier le programme d'inventaire afin que l'application peut gérer plusieurs éléments. Utilisez un tableau pour stocker les éléments. La sortie doit afficher les informations un produit à la fois, y compris le numéro d'article, le nom du produit, le nombre d'unités en stock, le prix de chaque unité et la valeur de l'inventaire de ce produit. .

  2. En outre, la sortie doit afficher la valeur de l'inventaire entier.

  3. Créez une méthode pour calculer la valeur de l'inventaire entier.

  4. Créez une autre méthode pour trier les éléments du tableau par le nom du produit.

Pour satisfaire à ces exigences, vous devrez ajouter ce qui suit à votre classe d'inventaire (pas de classe de produit):

1) Déclarer un tableau de type produit (une variable d'instance privée)

2) A l'intérieur de votre principale en boucle, procédez comme suit:

a. Instantiate a product object 
b. Populate the product object with the input from the console (like Inventory Part 1  does) 
c. Add the product object reference to the next element in your array 
d. Destroy the reference to the product object variable (note this object was added to your array so you can set the local variable that refers to the object to null) 

3) en dehors de votre principale en boucle, procédez comme suit:

a. Call a method in your Inventory class to sort the array of Product objects. Note you need to sort an array of Product objects by the Product Name instance variable. To do this, you will need to create a separate .java file that implements the Comparator interface. You will pass the Product array and implemented Comparator interface class as arguments to the sort method of the Arrays class (part of the Java API). 
b. Create a For Loop that iterates through the array of Product objects (similar to the one I have below). Invoke the get method on each instance variable and format the output by calling printf. Sample For Loop to use: 
for (Product product : productArray) 
    {   Add statements here 
    } 
c. Call a method in your Inventory class to calculate the total inventory value of all the Product objects in your array. 

Voici mon code

public class InvTest2{// main method begins 
     public static void main(String args[]) { 

     int version = 2;// Version number 
     final int invLeng = 5;// Declare Inv length 

     // Welcome message 
     System.out.printf("\n%s%d\n" , 
     "Welcome to the Inventory Program v.", version); 

     Inv[] DVDs = new Inv[invLeng]; 
     DVDs[0] = new Inv("The Invisible Man", 0, 8.50); // new DVD constructor 
     DVDs[1] = new Inv("The Matrix", 1, 17.99); 
     DVDs[2] = new Inv("Se7en", 7, 12.99); 
     DVDs[3] = new Inv("Oceans Eleven", 11, 9.99); 
     DVDs[4] = new Inv("Hitch Hikers Guide to the Galaxy", 42, 18.69); 

     // Display formatted results 
     int c = 0; 
     double runningValue = 0; 
     System.out.printf("\n%s\n", "Inventory of DVD movies"); 
     while(c != DVDs.length){ 
     System.out.printf("\n\n%s%d\n%s%s\n%s%d\n%s%,.2f\n%s%,.2f\n", 
     "Item Number:  ",c,  
     "DVD Title:  ",DVDs[c].getdvdTitle(), 
     "Copies in stock: ",DVDs[c].getdvdInStock(), 
     "Price each disk: $",DVDs[c].getdvdValue(), 
     "Value of copies: $",DVDs[c].getdvdStockValue());//End print 
     runningValue += DVDs[c].getdvdStockValue(); 
     c++; 
     } 
     System.out.printf("\n%s%,.2f\n", 
     "Collection Value: $",runningValue); 

     }// end method main 

}//end class Inventory1 

Voici l'inventaire

public class Inv {//Begin DVD class 

    // Declare instance variables 
    String dvdTitle;// Declare title as string 
    int dvdInStock;// Declare dvdInStock as float 
    double dvdValue;// Declare dvdValue as float 

    // constructor initializes DVD information 
    public Inv(String title, int inStock, double value) { // Initialize (clear) instance variables here 
     dvdTitle = title; 
     dvdInStock = inStock; 
     dvdValue = value; 
     } // end constructor 

    public String getdvdTitle() {// public method to get the DVD name 
     return dvdTitle;}// end method getdvdTitle 

    public int getdvdInStock() {// public method to retrieve the dvdInStock 
     return dvdInStock;} // end method get dvdInStock 

    public double getdvdValue() {// public method to retrieve the dvdValue 
     return dvdValue;} // end method get dvdValue 

    public double getdvdStockValue() {// public method to dvdStockValue 
     return (dvdValue * dvdInStock);}// end method get dvdStockValue 

    } // end class Inv 
+1

Votre code ne respecte pas les exigences de votre instructeur. Vous voudrez peut-être commencer par là. – doomspork

+0

Désolé pour cette modification clobber. Roulez le mien si vous sentez que j'ai fait un mauvais travail. – Welbog

+1

Le problème avec le fait de demander de l'aide pour les devoirs, c'est que personne qui ne doit plus jamais faire ses devoirs, veut le faire. vous êtes mieux de poser un tas de questions plus précises sur les problèmes réels que vous avez – mkoryak

Répondre

2

En utilisant le Comparator est facile et peut être accompli avec quelque chose comme ceci:

public class InvSortByName implements Comparator<Inv>{ 
    public int compare(Inv o1, Inv o2) { 
     return o1.getdvdTitle().compareTo(o2.getdvdTitle()); 
    } 
} 

Je crois, sur la base des instructions fournies et votre code, que vous pouvez être mal compris les lignes directrices. Il semble qu'il devrait y avoir une classe principale (...), une classe Inventory et une classe DVD/Product. Vous n'en avez actuellement qu'une partie.

Vous pouvez remplacer la boucle while dans votre main avec un nettoyant beaucoup plus facile et plus facile à utiliser foreach. Les instructions mentionnent et fournissent un exemple du pour-chacun. Cette boucle doit être retirée de la main en fonction des instructions fournies.

Vous devriez également passer en revue certaines des meilleures pratiques Java et conventions de dénomination. Etes-vous sûr de vouloir utiliser la méthode Arrays.sort?

+0

très utile. Merci pour le coup de coude monsieur! – gooddadmike

+0

C'est comme ça que je le vois aussi; une boucle de programme principal qui possède un seul objet Inventory dans lequel différents objets Product (DVD ici) peuvent être placés. La classe Inventory peut alors avoir une méthode de tri qui appelle Arrays.sort (T [], Comparator). (http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html#sort(T[],%20java.util.Comparator) – extraneon

+2

Vous pouvez également rendre votre DVD comparable et il suffit d'appeler Arrays.sort (T []) – extraneon

6

L'affectation vous dit exactement ce qu'il faut faire pour mettre en œuvre le tri par nom. Dormez, puis relisez le premier point sous "En dehors de votre boucle principale, procédez comme suit:".

+0

touche 'Je suppose que la partie comparateur n'était pas vraiment la lecture autant que je pourrais dire. C'était le problème principal, et le manque de sommeil. – gooddadmike

1

Pour une raison quelconque, l'exigence 5 me semble indiquer qu'il vous demande de coder votre propre méthode de tri. J'ai peut-être tort, mais vous voudrez peut-être vérifier avant d'utiliser Arrays.sort.

Questions connexes