Пытаясь понять метод сортировки. Java Домашнее задание - PullRequest
1 голос
/ 20 августа 2009

Это домашнее задание, но мне нужно "подтолкнуть". Я не могу найти способ сортировки по имени.

Мои вопросы: (Пожалуйста, держите ответы начинающих дружелюбно)

  1. Есть ли то, что выглядело правильно до сих пор?
  2. Как сортировать?
  3. У кого-нибудь есть рекомендации по оптимизации / очистке этого?

Вот задание:

Контрольная точка программы инвентаризации, часть 2, которая должна пройти на 6-й неделе, имеет следующие требования:

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

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

  3. Кроме того, выходные данные должны отображать стоимость всего инвентаря.

  4. Создать метод для расчета стоимости всего инвентаря.

  5. Создайте другой метод для сортировки элементов массива по названию продукта.

Чтобы удовлетворить эти требования, вам необходимо добавить в свой класс инвентаря (не класс продукта) следующее:

1) Объявить массив типа Product (частная переменная экземпляра)

2) Внутри основного цикла while выполните следующее:

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) Вне вашего основного цикла while выполните следующее:

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. 

Вот мой код

    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

Вот инвентарь

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

Ответы [ 3 ]

6 голосов
/ 20 августа 2009

Назначение говорит вам точно, что делать, чтобы осуществить сортировку по имени.

Немного поспите, а затем перечитайте первую точку маркера в разделе "Вне вашего основного цикла while выполните следующее:".

2 голосов
/ 20 августа 2009

Использование Comparator легко и может быть достигнуто с помощью чего-то вроде этого:

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

Я полагаю, что, основываясь на предоставленных инструкциях и вашем коде, вы, возможно, неправильно поняли правила. Кажется, что должны быть основной (...), класс Inventory и класс DVD / Product. В настоящее время у вас есть только часть этого.

Вы можете заменить цикл while в своей сети гораздо более чистым и простым в использовании foreach . В инструкциях упоминается и приводится пример для каждого. Этот цикл следует удалить из основного на основании предоставленных инструкций.

Вам также следует ознакомиться с некоторыми основными рекомендациями по Java и соглашениями об именах.

1 голос
/ 21 августа 2009

Вы уверены, что должны использовать метод Arrays.sort? По какой-то причине мне кажется, что требование 5 требует от вас написания собственного метода сортировки. Хотя я могу ошибаться, но вы можете проверить это перед использованием Arrays.sort.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...