试图理解排序方法。 Java家庭作业

时间:2009-08-20 17:58:29

标签: java

这是作业,但我需要“轻推”。我找不到如何按名称排序。

我的问题:(请保持答案初学友好)

  1. 到目前为止看起来是否合适?
  2. 如何排序?
  3. 有没有人建议优化/清理它?
  4. 这是作业:

      

    第6周到期的库存计划第2部分检查点具有以下要求:

         
        
    1. 修改库存程序,以便应用程序可以处理多个项目。使用数组存储项目。

    2.   
    3. 输出应该一次显示一个产品的信息,包括产品编号,产品名称,库存单位数量,每个单位的价格以及库存的价值。产品

    4.   
    5. 此外,输出应显示整个广告资源的值。

    6.   
    7. 创建一种计算整个广告资源价值的方法。

    8.   
    9. 创建另一种方法,按产品名称对数组项进行排序。

    10.         

      要满足这些要求,您需要将以下内容添加到Inventory类(而非产品类):

           

      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 个答案:

答案 0 :(得分:6)

该作业将告诉您如何按名称实施排序。

进行一些睡眠,然后重新读取“在主循环之外的第一个项目符号点,执行以下操作:”。

答案 1 :(得分:2)

使用Comparator非常简单,可以通过以下方式完成:

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

我相信,根据提供的说明和您的代码,您可能会误解指南。似乎应该有一个main(...),一个Inventory类和一个DVD / Product类。你目前只有部分内容。

您可以使用更清晰,更易于使用的foreach替换主体中的while循环。说明中提到并提供了for-each的示例。应根据提供的说明从主体中删除此循环。

您还应该查看一些基本的Java最佳实践和命名约定。

答案 2 :(得分:1)

你确定你应该使用Arrays.sort方法吗?由于某种原因,我认为要求5要求您编写自己的排序方法。我可能错了,但你可能想在使用Arrays.sort之前验证。