第四章 .............................................................................................................................................. 1
4.9 声明 MyDate 类......................................................................................................... 1 4.10 求前 n 个质数 .......................................................................................................... 5 4.11 编写实现从两个字符串中找出最长的相同字符列的代码。 .............................. 6 4.12 整理字符串 .............................................................................................................. 7 4.13 编写用数组实现大整数的类,提供大整数的加、减、乘等运算。
..................8
第四章
4.9 声明 MyDate类, 功能:增加 1 天,增减 1 月和增加 1 年的方法; 输出 MyDate 对象日期的方法;求两个 MyDate对象日期差的方法。并提供能用当前日期初始 化 MyDate类对象的构造方法。
程序运行结果:
源文件: MyDate.java
import java.util.Calendar;
/**
* 日历类
* @author 黎明你好 */ public class MyDate {
public static long YEAR_MSEL = 1000*60*60*24*365L; public static long MONTH_MSEL = 1000*60*60*24*30L; public static long DATE_MSEL = 1000*60*60*24L; public static long HOUR_MSEL = 1000*60*60L; public static long MINUTE_MSEL = 1000*60L; private int year ; private int month ; private int date ; private int hour ; private int minute ; private int second ; private Calendar calendar ; /**
* 构造方法 使用当前时间日期初始化对象 */ public MyDate() {
calendar = Calendar. getInstance (); year = calendar .get(Calendar. YEAR); month = calendar .get(Calendar. MONTH) + 1; date = calendar .get(Calendar. DAY_OF_MONTH); hour = calendar .get(Calendar. HOUR_OF_DAY); minute = calendar .get(Calendar. MINUTE );
second = calendar } /**
.get(Calendar. SECOND);
* 构造方法 使用指定年、月、日初始化对象 */ public MyDate( int year, int month, int date)
{
set(year, month, date); } /**
* 构造方法 使用指定年、月、日、时、分、秒初始化对象 */ public MyDate( int year, int month, int date, int hourOfDay, int
second) {
set(year, month, date, hourOfDay, minute, second); }
/**
* 设置日历字段 year 、month 和 date 的值。 * @param year - 用来设置 YEAR 日历字段的值。 * @param month - 用来设置 month 日历字段的值。 * @param date - 用来设置 date 日历字段的值。 */ public void set( int year, int month, int date) {
set(year, month, date,0,0,0); }
/**
* 设置日历字段 year 、month 和 date 的值。 * @param year - 用来设置 YEAR 日历字段的值。 * @param month - 用来设置 month 日历字段的值。 * @param date - 用来设置 date 日历字段的值。 * @param hourOfDay - 用来设置 hour 日历字段的值。
* @param minute - 用来设置 minute 日历字段的值。 * @param second - 用来设置 second 日历字段的值。 */ public void set( int year, int month, int date, int hourOfDay, int second)
{
calendar = Calendar. getInstance ();
calendar .set(year, month-1, date,hourOfDay,minute,second); this . year = calendar .get(Calendar. YEAR);; this . month = calendar .get(Calendar. MONTH) + 1; this . date = calendar .get(Calendar. DAY_OF_MONTH); this . hour = calendar .get(Calendar. HOUR_OF_DAY); this . minute = calendar .get(Calendar. MINUTE ); this . second = calendar .get(Calendar. SECOND); }
/**
* 增加一天 */ public void addOneDay() {
date ++;
calendar .set( year , month , date ); } /**
int minute,
int minute,
* 增减一月 */ public void addOneMonth() {
month ++;
calendar .set( year , month , date ); } /**
* 增加一年 */ public void addOneYear() {
year ++;
calendar .set( year , month , date ); } /**
* 返回此时间值,以毫秒为单位。
* @return - 当前时间,以从历元至现在所经过的 UTC 毫秒数形式。
*/ public long getTimeInMillis() {
return calendar .getTimeInMillis(); } /**
* 两个日期相差的时间
* @param md - 另一个日期对象
* @return - 相差的时间 */ public String apart(MyDate md) {
long msel = this .getTimeInMillis() - md.getTimeInMillis(); msel = Math. abs (msel); boolean boo = msel>0? true : false ; long year = msel/MyDate. YEAR_MSEL ; long date = msel%MyDate. YEAR_MSEL /MyDate. DATE_MSEL ; long hour = msel%MyDate. DATE_MSEL /MyDate. HOUR_MSEL; long minute = msel%MyDate. HOUR_MSEL/MyDate. MINUTE_MSEL ; long second = msel%MyDate. MINUTE_MSEL /1000; String result = \; if ( boo ) result = \已过去 \
result =
\还有\
result += (year +
\年\+ date+
\天\+ hour +
\小时\+ minute +
分钟\+ second + \秒\
return result; }
/**
* 返回此日历的字符串表示形式。 * @return - 此日历的字符串表示形式。 */ public String toString() { return year + \年\+ month + \月\+ date + \日,\+ hour + \+ minute
+ \
+ second ;
\
} }
测试类源文件: TestMyDate.java /**
* MyDate 的测试类 * @author 黎明你好 */ public class TestMyDate {
public static void main(String[] args) {
MyDate md1 = new MyDate(); MyDate md2 = new MyDate(2010,2,13); MyDate md3 = new MyDate(2008,8,8,20,0,0);
System. out .println( \当前时间: \+ md1.toString()); System. out .println( \年除夕: \+ md2.toString());
md2.addOneDay(); System. out .println( \增加一天后,大年初一: \+ md2.toString()); System. out .println( \现在距新年: \+ md1.apart(md2));
System. out .println( \现在距 08 年北京奥运会: \+ md1.apart(md3)); }
}
4.14
求前 n 个质数。要求确定 m是否是质数,用早先求出的质数对 来确定。
/**
* 求前 n 个质数。
* 确定 m 是否是质数,用早先求出的质数对 m 的整除性来确定。
* @author 黎明你好 */ public class Work4_10 {
/** 用来存质数的数组 */ private int arrayInt []; public Work4_10(
int
n)
{
arrayInt = new int [n];
arrayInt [0] = 2; int index = 1; // 保存数组的有效长度 boolean boo = true ; for ( int i = 2; i < arrayInt . length ; i++) {
boo = true ;
for ( int j = 0; j < index; j++) {
if (i % arrayInt [j] == 0) // 用已存入数组中的质数判断boo = false ; }
if (boo) // 如果是 true 则是指数,存入数组,数组有效长度加
{
arrayInt [index] = i; index++; } }
m的整除性 1.