简单的身份证号码,全面填写,可以比较年份、月份、天数(初学者学习可以看看)

需要用到掃描儀控制臺、時間格式

import java.util.Calendar; //這是獲取日曆 calendar翻譯也叫做日曆;
import java.util.Scanner;
//這是掃描儀 可以在控制臺輸入

這是Calendar的api意思;
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

该类还为实现包范围外的具体日历系统提供了其他字段和方法。这些字段和方法被定义为 protected。

与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:

 Calendar rightNow(這裏意思是隨便寫的,不用在意rightNow是什麽,自定義常量和變量) = Calendar.getInstance();

這是scanner 的api 的意思
一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。

Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。

這是原理代碼,簡單基礎比較全面一點,初學者需要理解一定基礎才可以看得懂

導入包類如下: scanner 、calendar;
用到的類型如下: 整數類型、字符串類型;
用到的方法如下:獲取指定位數字符串到(substring)、掃描方法(scanner)、轉換整數類型(parseint)、-、==、>、<
如圖下附上代碼;
在这里插入图片描述
在这里插入图片描述

  1. package Yanshi;

    //做随机扫描控制平台的记录、   身份证号码:110101199003071233
    import java.util.Calendar;
    import java.util.Scanner;
    
    public class Sfz12 {													
    	public static void main(String args[]) {					
    		while (true) {
    			
    			Scanner sc = new Scanner(System.in);						//掃描初始化方法
    			Calendar cal = Calendar.getInstance();						//設定日曆格式;	
    			int year = cal.get(Calendar.YEAR);							//獲取現在的年份
    			int month = cal.get(Calendar.MONTH);						//現在的月份
    			int day = cal.get(Calendar.DATE);							//獲取現在的天數
    			String sfz = sc.next();										//掃描記錄
    			String sfz1 = sfz.substring(6, 14); 						// 获取身份证号码上的年份和月份、天数;例如19900505
    			String sfz2 = sfz.substring(6, 10); 						// 获取身份证号码的年份
    			String month1 = sfz1.substring(4, 6); 						// 获取身份证号码的月份
    			String day1 = sfz1.substring(6, 8); 						// 获取身份证号码的天数
    			int csnl = Integer.parseInt(sfz2);
    			int month2 = Integer.parseInt(month1);
    			int day2 = Integer.parseInt(day1);
    			if ((year - csnl) > 18) {
    				System.out.println("成年了");
    			} else if ((year - csnl) < 18) {
    				System.out.println("未成年");
    			}
    			if ((year - csnl) == 18) {									//比較成年了
    //				System.out.println("-------比較-------");				//這裏是用來測試代碼對不對,可以不用寫的;
    			}
    			if ((month + 1) > month2) {
    //				System.out.println("-------比較1-------");				//這裏是用來測試代碼對不對,可以不用寫的;
    			}
    			if ((month + 1) < month2) {
    //				System.out.println("-------比較2-------");				//這裏是用來測試代碼對不對,可以不用寫的;
    			}
    			if ((month + 1) == month2) {
    //				System.out.println("-------比較3-------");				//這裏是用來測試代碼對不對,可以不用寫的;
    			}
    			if (day > day2) {
    //				System.out.println("未成年");							//這裏是用來測試代碼對不對,可以不用寫的;
    			}
    			if (day < day2) {
    //				System.out.println("成年了--");							//這裏是用來測試代碼對不對,可以不用寫的;
    			}
    			if (day == day2) {
    				System.out.println("成年了---");							//這裏代碼是由問題,比較天數有問題,暫時沒想到怎麽解決問題,放出來給大家看下哈;
    			}
    		}
    
    //			System.out.println(sfz1);
    
    	}
    }
    

以上,這代碼還是有問題的,簡單使用,練習下就沒問題。

就是在比較天數會有問題,不知道有大佬來指點下嗎?小弟在這裏謝過大家了。

ps:
6.13:代码问题查出来了,今天某个天,自己再重新检查代码时候,找到这简单的问题,让我真的很想捂脸啊。。!

我没把这个if的条件循环加进去,造成了独立的循环判断,所以一共有3个if独立判断,所以造成无法返回到年份和“成年”、“未成年。”

个人警告:初学者最容易犯的错误就是,把代码全部都写上,然后没有用下心来思考这行这代码是否有问题

所以本人以身为测,犯下的错误,自己找了好久才知道问题在哪里,还是我自己在封装东西的时候,无意想到的,
提醒!
提醒!
提醒!
写一行代码时候,最好一行一行检查下这行代码是否可以运行,因为你没熟练到一定程度时候,会很容易犯低级错误,所以请没熟练到逻辑关系和身体本能肌肉记忆写代码时候,还是最好一行一行检查!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值