tags:

views:

352

answers:

3

I stayed up till 3 last night reading till my eyes bled. This is homework, but I need a "nudge". I can't find how to sort by name.

My Questions: (Please keep answers beginner friendly)

  1. Does what have look right so far?
  2. How to sort?
  3. Does anyone have recommendations for optimizing/cleaning this?

Here is the assignment:

The Inventory Program Part 2 checkpoint that is due in week 6 has the following requirements:

  1. Modify the Inventory Program so the application can handle multiple items. Use an array to store the items.

  2. The output should display the information one product at a time, including the item number, the name of the product, the number of units in stock, the price of each unit, and the value of the inventory of that product.

  3. In addition, the output should display the value of the entire inventory.

  4. Create a method to calculate the value of the entire inventory.

  5. Create another method to sort the array items by the name of the product.

To satisfy these requirements, you will need to add the following to your Inventory class (not product class):

1) Declare an array of type Product (a private instance variable)

2) Inside your main while loop, do the following:

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) Outside of your main while loop, do the following:

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.

Here is my 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

Here is inventory

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
+6  A: 

The assignment tells you exactly what to do in order to implement sorting by name.

Get some sleep, and then reread the first bullet point under "Outside of your main while loop, do the following:".

Matt Ball
touche' I guess the comparator part wasn't really in the reading as far as I could tell. That was the main problem, and the lack of sleep.
lazfish
+2  A: 

Using the Comparator is easy and can be accomplished with something like this :

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

I believe, based on the instructions provided and your code, that you may be misunderstanding the guidelines. It seems that there should be a main(...), an Inventory class, and a DVD/Product class. You currently only have part of that.

You could replace the while loop in your main with a much cleaner and easier to use foreach. The instructions mention and provided an example of the for-each. This loop should be removed from the main based on the instructions provided.

You should also review some of the basic Java best practices and naming conventions.

Doomspork
very helpful. Thank for the nudge sir!
lazfish
That's the way I see it too; a main program loop which has a single Inventory object in which various Product objects (DVDs here) can be placed. The Inventory class could then have a sort method which calls Arrays.sort(T[], Comparator). (http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html#sort(T[],%20java.util.Comparator)
extraneon
Alternatively you can make your DVD Comparable and just call Arrays.sort(T[])
extraneon
@extraneon great point! I was considering doing just that but went with what the instructor requested. Still good tidbit to pass on!
Doomspork
+1  A: 

Are you sure you are supposed to be using the Arrays.sort method? For some reason, requirement 5 appears to me that it is asking you to code your own sort method. I may be wrong though, but you might want to verify before using Arrays.sort.

MAK