如何按价格和名称对商品进行排序?

时间:2011-02-13 01:49:44

标签: java arrays sorting

所以我对下一步该做什么有疑问。我正在研究这个项目并且要求是。

翅膀咖啡店

当地一家咖啡店向顾客出售下面显示的各种不同商品。系统会要求您编写可用于跟踪这些项目的Java应用程序。此外,该程序提供了打印项目列表的方法。

Item Name            Price
Coffee               $1.00
Water                $2.00
Milk                 $1.50
Bagel                $1.25
Donut                $0.75

您的程序将创建一个名为Item的类。该课程具有以下内容:

  • 用于保存项目名称的String实例变量
  • 用于保存价格的双重实例变量
  • 一个构造函数,它接受一个String并将double加到ini

创建此类后,您将编写名为CoffeeDriver的第二个类。该类有以下方法:

  • sortName - 此方法按项目名称对项目数组进行排序,然后在屏幕上显示所有项目的名称和价格
  • sortPrice - 此方法按项目价格对项目数组进行排序,然后在屏幕上显示所有项目的名称和价格
  • main - 使用上面的数据创建一个Item对象数组,以设置每个Item的信息。
  • 每个实例变量的获取和设置方法

到目前为止,这就是我所拥有的一切。我很难想到如何对数组进行排序。因此,如果我排序2个不同的数组,我如何保持它们的正确顺序。就像例如coffee = $1一样,我如何对它进行排序并将它们保持在一起。

import java.util.Scanner;

public class CoffeeDriver {

//main method
    public static void main (String[] args){
        String[] itemName = {"Coffee, Water, Milk, Donut, Bagel"};
        double[] itemPrice = {1.00, 2.00, 1.50, 0.75, 1.25};
        Scanner input = new Scanner(System.in);
        String decision;

        System.out.println ("Welcome to Wings Coffee Shop");
        System.out.println ("We have a great list of tasty items on our menu.");
        System.out.println ("Would you like to see these items sorted by");
        System.out.println ("name or by price? (n/p): ");
        decision = input.nextLine();
            if (decision == "n"){
                sortName(itemName);
                }
            else {
                sortPrice(itemPrice);
                }
    }

//method to sort by item name and display
    public static void sortName (String[] array){
        for (int i = 0; i < array.length; i++){
            System.out.println (array[i].toString());
            }
    }

//method to sort by item price and display
    public static void sortPrice (double[] array){
        for (int i = 0; i < array.length; i++){
            System.out.println (array[i]);
            }
    }
}


public class Item {
    private String name;
    private double price;

    Item(String itemName, double itemPrice){
        itemName = name;
        itemPrice= price;
    }

    public String getName(){
        return name;
    }
    public void setName(String itemName){
        itemName = name;
    }

    public double getPrice(){
    return price;
    }

    public void setPrice(double itemPrice){
        itemPrice = price;
    }
}

5 个答案:

答案 0 :(得分:3)

更正类定义。

您需要为字段分配参数(在OP中,您为参数指定了字段)

使用Comparator对象参数实现单个字段的排序。

   List<Item> items=new ArrayList<Item>();
   items.add(new Item("A",1.2));
   items.add(new Item("Z",10.2));
   items.add(new Item("B",2.3));
   items.add(new Item("Y",5.4));
   items.add(new Item("B",1.3));


  java.util.Collections.sort(items,new Comparator<Item>()
   {
       public int compare(Item a,Item b)
        {
          if(a.getName().compareTo(b.getName())>0)
            return 1;
          else
          if(a.getName().compareTo(b.getName())<0)
            return -1;
          else
             return 0;            
        }
        public boolean equals(Object a)
         {
            return false;
         }
    });

答案 1 :(得分:0)

“我很难思考如何对数组进行排序”

你可以看看'java.util.Collections'类。它包含许多有用的方法,包括用于排序列表的工具。您还需要了解如何实现“比较器”对象。

编辑:还要仔细考虑你想要排序的内容。按价格排序项目和排序价格之间存在差异。

我认为这是作业,所以我不会给你完整的答案,但希望这会有所帮助。

答案 2 :(得分:0)

尝试查看应该促进您需要的Arrays.sort。

答案 3 :(得分:0)

你不会并行排序两个数组(这是可能的,但不是在Java API中,因此必须由你自己完成),但是从名称和价格信息创建Item对象(在数组或集合中) ,然后对此数组/ List进行排序(或使用像TreeSet这样的已排序集合)。

为此,您可能需要查看java.util.Comparatorjava.util.Collections.sort(或java.util.Arrays.sort)。

答案 4 :(得分:0)

伪Java代码(使用例如(Double)而不是double的对象表示会更容易,因为我们可以使用在对象级别实现的现有compareTo方法。)

class Item {
 private final String name;
 private final Double cost;
 :
 : //Getters and setters
 :
};

public static void sortByName(List<Item> items) {
 Collections.sort(items, new Comparator<Item>() {
     public int compare(Object o1, Object o2) {
        return (Item)o1.getName().compareTo(o2);
     }

     public boolean equals(Object o1) {
           return ((Item)o1).getName().equals((Item)o2).getName()) )
     } 

 }); 

public static void sortByPrice(List<Item> items) {
 Collections.sort(items, new Comparator<Item>() {
     public int compare(Object o1, Object o2) {
        return (Item)o1.getCost().compareTo(o2.getCost());
     }

     public boolean equals(Object o1) {
           return ((Item)o1).getCost().equals((Item)o2).getCost()) )
     } 

 });