OJ刷题——我爱淘宝

题目描述

最近superbin爱上了淘宝,一口气花重金买了好多好多的宝贝,O(∩_∩)O~ 
淘宝确实是个很方便的网上购物平台。首先,你需要注册一个淘宝账号,然后开通支付宝,再开通网上银行。选一件自己喜欢的宝贝,付款给淘宝。收到货后满意了,然后淘宝再把钱付给卖方,听起来挺不错的,还很安全。有空一定要试试哦。 
superbin去逛淘宝,里面的宝贝实在是太多了,不过还好有很多排序方式: 
1)按价格从低到高排序; 
2)按价格从高到低排序; 
3)按销量从高到低排序。 
其实还有很多,就列举这三个吧,现在就请你编程实现这个功能吧!

输入

有多组测试数据,每组数据的第一行是两个整数n,m,n表示有n件物品,1≤n≤100。M表示排序的方式(1≤m≤3)接下来的n行每一行是一个物品的信息,包括:
a.物品的名称name,由字母和数字组成,长度不超过100,且不为空;
b.价格 price,为正整数;
c.销量 sale,为非负整数;
保证数据都在int范围内。
然后排序的关键字相等,就按name的字典序排序,保证没有重复的name。

输出

排序后的结果

样例输入
3 1
Tshirt1 39 100
Tshirt2 49 10
Tshirt3 129 3

样例输出
Tshirt1 39 100
Tshirt2 49 10
Tshirt3 129 3

解题思路:把商品抽象为Item类,重写compareTo方法实现该类对象的可比较性。数据读入过程中,将这些对象存入一个ArrayList中,对这些元素进行一次根据名字的排序。同时把每个对象的价格和销量分别存入pri数组和sal数组中,根据读入的排序操作类别对对应的数组进行排序,遍历ArrayList中的对象按要求输出。注意:输出过的对象要移除,避免重复输出。
附上代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            int n = scan.nextInt();
            int m = scan.nextInt();
            scan.nextLine();
            ArrayList<Item> al = new ArrayList();
            int pri[] = new int[n];
            int sal[] = new int[n];
            for (int i = 0; i < n; i++) {
                String str[] = scan.nextLine().split(" +");
                String name = str[0];
                int price = Integer.valueOf(str[1]);
                int sale = Integer.valueOf(str[2]);
                al.add(new Item(name, price, sale));
                sal[i] = sale;
                pri[i] = price;
            }
            Collections.sort(al);
            if(m==1) {
                //按价格从低到高排序
                Arrays.parallelSort(pri);
                for(int i = 0;i<n;i++) {
                    for(int j = 0;j<al.size();j++) {
                        if(pri[i]==al.get(j).price) {
                            System.out.println(al.get(j).toString());
                            al.remove(j);
                        }
                    }
                }
            }else if(m==2) {
                //按价格从高到低排序
                Arrays.parallelSort(pri);
                for(int i = n-1;i>=0;i--) {
                    for(int j = 0;j<al.size();j++) {
                        if(pri[i]==al.get(j).price) {
                            System.out.println(al.get(j).toString());
                            al.remove(j);
                        }
                    }
                }
            }else if(m==3) {
                //按销量从高到低排序
                Arrays.parallelSort(sal);
                for(int i = n-1;i>=0;i--) {
                    for(int j = 0;j<al.size();j++) {
                        if(sal[i]==al.get(j).sale) {
                            System.out.println(al.get(j).toString());
                            al.remove(j);
                        }
                    }
                }
            }
        }
    }

}

class Item implements Comparable<Item> {
    String name;
    int price;
    int sale;

    Item(String name, int price, int sale) {
        this.name = name;
        this.price = price;
        this.sale = sale;
    }
    
    @Override
    public String toString() {
        return name + " " + price + " " + sale;
    }

    @Override
    public int compareTo(Item o) {
        // 按名称从小到大排序
        if (this.name.compareTo(o.name) > 0) {
            return 1;
        } else if (this.name.compareTo(o.name) < 0) {
            return -1;
        }
        // 相等情况
        return 0;
    }
}

 

 
posted @ 2020-04-20 23:52  LZhXue  阅读(156)  评论(0编辑  收藏  举报