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

s2j5cfk0  于 2023-05-05  发布在  Java
关注(0)|答案(6)|浏览(307)

所以我有个问题,下一步该怎么办。我正在做这个项目,要求是。

Wings咖啡厅

一家当地的咖啡店向顾客出售下面所示的各种不同的物品。您需要编写一个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的信息。
  • 每个示例变量的get和set方法

这是我目前所拥有的一切。我很难思考如何对数组排序。所以如果我对两个不同的数组排序,我如何让它们保持正确的顺序。比如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;
    }
}
trnvg8h3

trnvg8h31#

更正Item类定义。
你需要给字段分配参数(在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;
         }
    });
fhity93d

fhity93d2#

试着看看Arrays.sort,它应该可以帮助您实现所需的功能。

q5iwbnjs

q5iwbnjs3#

“我在想怎么排序阵法。”
您可以查看'java.util.Collections'类。它包含一堆有用的方法,包括排序列表的工具。你还需要学习如何实现一个'Comparator'对象。
编辑:也要仔细考虑你想要排序的内容。按价格排序和按价格排序是有区别的。
我假设这是家庭作业,所以我不会给予你完整的答案,但希望这对你有帮助。

rdrgkggo

rdrgkggo4#

你不会并行排序两个数组(这是可能的,但不是在Java API中,因此必须由你自己完成),而是从名称和价格信息创建Item对象(在数组或集合中),然后对这个数组/列表进行排序(或使用像TreeSet这样的排序集合)。
为此,您可能需要查看java.util.Comparatorjava.util.Collections.sort(或java.util.Arrays.sort)。

uurity8g

uurity8g5#

伪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()) )
     } 

 });
blpfk2vs

blpfk2vs6#

public void sortTShirt(List<TShirt> matchingTShirts, String outputPreference) {
        if (outputPreference.equals("Price")) {
            matchingTShirts.sort(Comparator.comparingDouble(t -> Double.parseDouble(t.getPrice())));
        } else if (outputPreference.equals("Rating")) {
            matchingTShirts.sort(Comparator.comparing(TShirt::getRating).reversed());
        } else {
            matchingTShirts.sort(Comparator.comparing((TShirt b) -> Double.parseDouble(b.getPrice())).reversed()
                    .thenComparing((TShirt b) -> Double.parseDouble(b.getRating())).reversed());
        }
    }

相关问题