7-6 jmu-Java-02基本语法-03-身份证排序

PTA Java程序设计

7-6 jmu-Java-02基本语法-03-身份证排序


懒人一键copy

解题思路:

  • 采用调用对象来实现身份证排序,定义两个类分别为sort1sort2
  • 在类中分别定义特有的方法来实现要求
  • Main方法中判断输入的情况来调用不同对象的方法

1.输入

输入n,然后连续输入n个身份证号

分析:

  • 定义整数n,并用数组存储身份证号出生日期
  • 使用for循环将身份证号存储到数组中
 		Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String[] birth = new String[n];
        String[] arr = new String[n];
        //定义身份证数组
        for (int i = 0; i < n; i++) {
            arr[i] = sc.next();
        }

2.判断输入

根据输入的是sort1还是sort2,执行不同的功能。输入的不是sort1或sort2,则输出exit并退出。

分析:

  • 根据题目可以理解到判断输入需要在while循环下进行
  • 需要定义一个String类型的变量来进行判断
  • 使用equals方法来判断是否是对应数值
  • 输入sort1则调用sort1类中的sort方法并传入参数
  • 输入sort2则调用sort2类中的sort方法并传入参数
		String str;
		while (true) {
            str = sc.next();
            if (str.equals("sort1")) {
                new sort1().sort(n, arr, birth);
            } else if (str.equals("sort2")) {  
                //判断输入的值是否是sort2,是则打印升序身份证
                new sort2().sort(n,arr,birth);
            } else {
                System.out.println("exit");
                break;
            }
        }

3.输入sort1

输入sort1,将每个身份证的年月日抽取出来,按年-月-日格式组装,然后对组装后的年-月-日升序输出。

分析:

  • 创建类sort1,在类中定义sort方法并接收整数n、身份证号arr、出生日期birth
  • 使用for循环来将截取到的出生日期赋值给birth,并使用升序sort方法来将出生日期升序
  • 打印出生日期
	class sort1 {
   		public void sort(int n, String[] arr, String[] birth) {
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            birth[i] = arr[i].substring(6, 10) + "-" + arr[i].substring(10, 12) + "-" + arr[i].substring(12, 14);
            //利用substring方法提取身份证上的出生日期,并用-连接
        }
        //判断输入的值是否是sort1,是则打印升序生日
        Arrays.sort(birth);
        for (int i = 0; i < n; i++) {
            System.out.println(birth[i]);
        	}
    	}
	}

4.输入sort2

输入sort2,将所有身份证按照里面的年月日升序输出。

分析:

  • 创建类sort2,在类中定义sort方法并接收整数n、身份证号arr、出生日期birth
  • 使用for循环来将截取到的出生日期赋值给birth,并使用升序sort方法来将出生日期升序
  • 用双重for循环来判断身份证是否包含出生日期,包含则将值打印
  • substring方法截取字符串中,介于两个指定下标之间的字符。
  • contains方法用于判断字符串中是否包含指定的字符或字符串。如果包含指定的字符或字符串返回 true,否则返回 false。
class sort2 {
    void sort(int n, String[] arr, String[] birth) {
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            birth[i] = arr[i].substring(6, 10) + arr[i].substring(10, 12) + arr[i].substring(12, 14);
            //利用substring方法提取身份证上的出生日期,并合并起来00000019830930000
                                                              //19830930
        }
        Arrays.sort(birth);//升序
        for (int i = 0; i < n; i++) {
            //此循环为遍历次数
            for (int j = 0; j < n; j++) {
                //此循环为遍历匹配,出生日期为升序状态,遍历匹配身份证哪个索引包含该值
                if (arr[j].contains(birth[i])) {
                    //判断arr身份证是否包含出生日期birth,包含则返回ture
                    System.out.println(arr[j]);
                    //返回true则将该数组的索引值打印出来
                }
            }
        }
    }
}

懒人一键copy

import java.util.Arrays;
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        String[] birth = new String[n];
        String[] arr = new String[n];
        String str;
        //定义身份证数组
        for (int i = 0; i < n; i++) {
            arr[i] = sc.next();
        }
        while (true) {
            str = sc.next();
            if (str.equals("sort1")) {
                new sort1().sort(n, arr, birth);
            } else if (str.equals("sort2")) {
                //判断输入的值是否是sort2,是则打印升序身份证
                new sort2().sort(n,arr,birth);
            } else {
                System.out.println("exit");
                break;
            }
        }
    }
}

class sort1 {
    void sort(int n, String[] arr, String[] birth) {
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            birth[i] = arr[i].substring(6, 10) + "-" + arr[i].substring(10, 12) + "-" + arr[i].substring(12, 14);
            //利用substring方法提取身份证上的出生日期,并用-连接
        }
        //判断输入的值是否是sort1,是则打印升序生日
        Arrays.sort(birth);
        for (int i = 0; i < n; i++) {
            System.out.println(birth[i]);
        }
    }
}

class sort2 {
    void sort(int n, String[] arr, String[] birth) {
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            birth[i] = arr[i].substring(6, 10) + arr[i].substring(10, 12) + arr[i].substring(12, 14);
            //利用substring方法提取身份证上的出生日期,并合并起来00000019830930000
                                                              //19830930
        }
        Arrays.sort(birth);//升序
        for (int i = 0; i < n; i++) {
            //此循环为遍历次数
            for (int j = 0; j < n; j++) {
                //此循环为遍历匹配,出生日期为升序状态,遍历匹配身份证哪个索引包含该值
                if (arr[j].contains(birth[i])) {
                    //判断arr身份证是否包含出生日期birth,包含则返回ture
                    System.out.println(arr[j]);
                    //返回true则将该数组的索引值打印出来
                }
            }
        }
    }
}
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值