Java 7-1 sdut-Collection-sort--C~K要找女朋友了! (10 分)

7-1 sdut-Collection-sort–C~K要找女朋友了! (10 分)
临近11.11,CK看见周围的朋友一个个的都脱单或者正准备脱单了,CK也想要找一个女朋友了(听说国家会分配?)。MeiK听说了这件事情,表示CK终于开悟了,所以他整理了一份候选人名单给CK。可是CK心里有自己心动女生的身高区间和年龄限制,所以他想把符合条件的女生的信息给筛选出来,但是这可是难住了CK,事关C~K的幸福,你能帮帮他吗?

提示:MeiK提供的名单里可能会有重复的女生的信息。

输入格式:
多组输入。

第一行输入MeiK的候选人名单里有N个人(N<100000)。

第二行输入四个整数a,b,c,d。分别表示C~K心动女生的身高的最小值和最大值,年龄的最小值和最大值。(题目保证a<=b,c<=d)

接下来输入N行,每行表示一个女生的信息(姓名,身高,年龄,联系方式)

ps:联系方式不超过11个字符。

输出格式:
对于每一组输入,第一行输出一个n,表示符合条件的女生的数量。

接下来的n行,每一行输出一个符合条件的女生的信息。

输出顺序按身高从低到高排序,若身高相同,则按年龄从高到底排序,若年龄也相同,则按照输入顺序输出。

输入样例:

4
160 170 20 22
女神1 161 19 11111
女神2 167 20 22222
女神2 167 20 22222
女神3 163 21 33333
3
160 170 20 30
CHRR 161 29 22222
MICK 161 29 11111
KATE  161 39 22222

输出样例:

2
女神3 163 21 33333
女神2 167 20 22222
2
CHRR 161 29 22222
MICK 161 29 11111

注意要下标对应!!!!!!
由于要排除输入的是同一个人,所以在输入的时候我们用.nextLine() 直接将一个人的所有信息读入,
再用.split(" ") 通过空格将其分开, 并分别赋值。
将读入的.nextLine() 存入set中,通过set进行筛选相同的人。


import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            Set<String> set = new HashSet<>();
            int n = scanner.nextInt();
            int high_low = scanner.nextInt();
            int high_top = scanner.nextInt();
            int age_low = scanner.nextInt();
            int age_top = scanner.nextInt();
            String name[] = new String[n];
            int height[] = new int[n];
            int age[] = new int[n];
            String phone[] = new String[n];
            int count = 0;//满足的人数
            int res[] = new int[n];
            Arrays.fill(res, -1);//将res数组中的值全部赋值为-1.
            //找出满足要求的人的下标
            scanner.nextLine();//吃掉上一个输入的回车。
            for (int i = 0; i < n; i++) {
                String str =scanner.nextLine();
                String[] strings = str.split(" ");
             
                name[i] = String.valueOf(strings[0]);
                height[i] = Integer.parseInt(strings[1]);
                age[i] = Integer.parseInt(strings[2]);
                phone[i] = String.valueOf(strings[3]);
                if(!set.contains(str)){
                    set.add(str);
                    if (height[i] >= high_low && height[i] <= high_top && age[i] >= age_low && age[i] <= age_top) {
                        res[i] = i;//记录满足的下标,值与下标相等,列如res[5]=5;
                        count++;//记录人数
                    }
                }

            }
            //满足要求的新数组
            String new_name[] = new String[count];
            int new_height[] = new int[count];
            int new_age[] = new int[count];
            String new_phone[] = new String[count];
            int c = 0;
            //进行赋值,按照输入顺序进行排的。
            for (int i : res) {
                if (i != -1) {
                    //对满足要求的进行赋值到新数组中
                    new_name[c] = String.valueOf(name[i]);
                    new_height[c] = height[i];
                    new_age[c] = age[i];
                    new_phone[c] = String.valueOf(phone[i]);

                    c++;
                }
            }
            //进行排序
            for (int i = 0; i < count; i++) {
                for (int j = 0; j < count - i - 1; j++) {
                    if (new_height[j] > new_height[j + 1]) {//按照身高进行升序排序
                        String st = String.valueOf(new_name[j]);
                        new_name[j] = String.valueOf(new_name[j + 1]);
                        new_name[j + 1] = String.valueOf(st);

                        int hi = new_height[j];
                        new_height[j] = new_height[j + 1];
                        new_height[j + 1] = hi;

                        int ag = new_age[j];
                        new_age[j] = new_age[j + 1];
                        new_age[j + 1] = ag;

                        String ph = String.valueOf(new_phone[j]);
                        new_phone[j] = String.valueOf(new_phone[j + 1]);
                        new_phone[j + 1] = String.valueOf(ph);

                    }
                    if (new_height[j]==new_height[j+1]){
                        if(age[j] < age[j+1]){//按照年龄降序排
                            String st = String.valueOf(new_name[j]);
                            new_name[j] = String.valueOf(new_name[j + 1]);
                            new_name[j + 1] = String.valueOf(st);

                            int hi = new_height[j];
                            new_height[j] = new_height[j + 1];
                            new_height[j + 1] = hi;

                            int ag = new_age[j];
                            new_age[j] = new_age[j + 1];
                            new_age[j + 1] = ag;

                            String ph = String.valueOf(new_phone[j]);
                            new_phone[j] = String.valueOf(new_phone[j + 1]);
                            new_phone[j + 1] = String.valueOf(ph);
                        }
                    }
                }
            }
            //进行输出
            System.out.println(count);
            for(int i=0;i<count;i++){
                System.out.print(new_name[i]+" "+new_height[i]+" "+new_age[i]+" "+new_phone[i]);
                System.out.println();
            }
        }


    }
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超好的小白

没体验过打赏,能让我体验一次吗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值