自考JAVA语言程序设计一课后习题答案和源代码第四章.docx

上传人:b****6 文档编号:8706987 上传时间:2023-02-01 格式:DOCX 页数:24 大小:42.95KB
下载 相关 举报
自考JAVA语言程序设计一课后习题答案和源代码第四章.docx_第1页
第1页 / 共24页
自考JAVA语言程序设计一课后习题答案和源代码第四章.docx_第2页
第2页 / 共24页
自考JAVA语言程序设计一课后习题答案和源代码第四章.docx_第3页
第3页 / 共24页
自考JAVA语言程序设计一课后习题答案和源代码第四章.docx_第4页
第4页 / 共24页
自考JAVA语言程序设计一课后习题答案和源代码第四章.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

自考JAVA语言程序设计一课后习题答案和源代码第四章.docx

《自考JAVA语言程序设计一课后习题答案和源代码第四章.docx》由会员分享,可在线阅读,更多相关《自考JAVA语言程序设计一课后习题答案和源代码第四章.docx(24页珍藏版)》请在冰豆网上搜索。

自考JAVA语言程序设计一课后习题答案和源代码第四章.docx

自考JAVA语言程序设计一课后习题答案和源代码第四章

第四章

4.9声明MyDate类,功能:

增加1天,增减1月和增加1年的方法;输出MyDate对象日期的方法;求两个MyDate对象日期差的方法。

并提供能用当前日期初始化MyDate类对象的构造方法。

程序运行结果:

源文件:

MyDate.java

importjava.util.Calendar;

/**

*日历类

*@author黎明你好

*/

publicclassMyDate

{

publicstaticlongYEAR_MSEL=1000*60*60*24*365L;

publicstaticlongMONTH_MSEL=1000*60*60*24*30L;

publicstaticlongDATE_MSEL=1000*60*60*24L;

publicstaticlongHOUR_MSEL=1000*60*60L;

publicstaticlongMINUTE_MSEL=1000*60L;

privateintyear;

privateintmonth;

privateintdate;

privateinthour;

privateintminute;

privateintsecond;

privateCalendarcalendar;

/**

*构造方法使用当前时间日期初始化对象

*/

publicMyDate()

{

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);

}

/**

*构造方法使用指定年、月、日初始化对象

*/

publicMyDate(intyear,intmonth,intdate)

{

set(year,month,date);

}

/**

*构造方法使用指定年、月、日、时、分、秒初始化对象

*/

publicMyDate(intyear,intmonth,intdate,inthourOfDay,intminute,intsecond)

{

set(year,month,date,hourOfDay,minute,second);

}

/**

*设置日历字段year、month和date的值。

*@paramyear-用来设置YEAR日历字段的值。

*@parammonth-用来设置month日历字段的值。

*@paramdate-用来设置date日历字段的值。

*/

publicvoidset(intyear,intmonth,intdate)

{

set(year,month,date,0,0,0);

}

/**

*设置日历字段year、month和date的值。

*@paramyear-用来设置YEAR日历字段的值。

*@parammonth-用来设置month日历字段的值。

*@paramdate-用来设置date日历字段的值。

*@paramhourOfDay-用来设置hour日历字段的值。

*@paramminute-用来设置minute日历字段的值。

*@paramsecond-用来设置second日历字段的值。

*/

publicvoidset(intyear,intmonth,intdate,inthourOfDay,intminute,intsecond)

{

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);

}

/**

*增加一天

*/

publicvoidaddOneDay()

{

date++;

calendar.set(year,month,date);

}

/**

*增减一月

*/

publicvoidaddOneMonth()

{

month++;

calendar.set(year,month,date);

}

/**

*增加一年

*/

publicvoidaddOneYear()

{

year++;

calendar.set(year,month,date);

}

/**

*返回此时间值,以毫秒为单位。

*@return-当前时间,以从历元至现在所经过的UTC毫秒数形式。

*/

publiclonggetTimeInMillis()

{

returncalendar.getTimeInMillis();

}

/**

*两个日期相差的时间

*@parammd-另一个日期对象

*@return-相差的时间

*/

publicStringapart(MyDatemd)

{

longmsel=this.getTimeInMillis()-md.getTimeInMillis();

msel=Math.abs(msel);

booleanboo=msel>0?

true:

false;

longyear=msel/MyDate.YEAR_MSEL;

longdate=msel%MyDate.YEAR_MSEL/MyDate.DATE_MSEL;

longhour=msel%MyDate.DATE_MSEL/MyDate.HOUR_MSEL;

longminute=msel%MyDate.HOUR_MSEL/MyDate.MINUTE_MSEL;

longsecond=msel%MyDate.MINUTE_MSEL/1000;

Stringresult="";

if(boo)

result="已过去";

else

result="还有";

result+=(year+"年"+date+"天"+hour+"小时"+minute+"分钟"+second+"秒");

returnresult;

}

/**

*返回此日历的字符串表示形式。

*@return-此日历的字符串表示形式。

*/

publicStringtoString()

{

returnyear+"年"+month+"月"+date+"日,"+hour+":

"+minute+":

"+second;

}

}

测试类源文件:

TestMyDate.java

/**

*MyDate的测试类

*@author黎明你好

*/

publicclassTestMyDate

{

publicstaticvoidmain(String[]args)

{

MyDatemd1=newMyDate();

MyDatemd2=newMyDate(2010,2,13);

MyDatemd3=newMyDate(2008,8,8,20,0,0);

System.out.println("当前时间:

"+md1.toString());

System.out.println("2010年除夕:

"+md2.toString());

md2.addOneDay();

System.out.println("增加一天后,大年初一:

"+md2.toString());

System.out.println("现在距新年:

"+md1.apart(md2));

System.out.println("现在距08年北京奥运会:

"+md1.apart(md3));

}

}

4.10求前n个质数。

要求确定m是否是质数,用早先求出的质数对m的整除性来确定。

/**

*求前n个质数。


*确定m是否是质数,用早先求出的质数对m的整除性来确定。


*@author黎明你好

*/

publicclassWork4_10

{

/**用来存质数的数组*/

privateintarrayInt[];

publicWork4_10(intn)

{

arrayInt=newint[n];

arrayInt[0]=2;

intindex=1;//保存数组的有效长度

booleanboo=true;

for(inti=2;i

{

boo=true;

for(intj=0;j

{

if(i%arrayInt[j]==0)//用已存入数组中的质数判断

boo=false;

}

if(boo)//如果是true则是指数,存入数组,数组有效长度加1.

{

arrayInt[index]=i;

index++;

}

}

}

/**

*打印数组元素

*/

publicStringprintArray()

{

Stringresult="";

for(inti=0;i

{

if(arrayInt[i]!

=0)

result+=arrayInt[i]+"";

}

returnresult;

}

publicstaticvoidmain(String[]args)

{

Work4_10w=newWork4_10(100);

System.out.println(w.printArray());

}

}

4.11编写实现从两个字符串中找出最长的相同字符列的代码。

程序运行结果:

/**

*找出两个字符串中,最长的相同字符列

*@author黎明你好

*/

publicclassWork4_11

{

publicstaticvoidmain(String[]args)

{

Stringstr1="0000abcdef0000";

Stringstr2="123ab4567cdef789abcdef";

Stringstr3=getLongSameString(str1,str2);

System.out.println("str1="+str1);

System.out.println("str2="+str2);

System.out.println("最长的相同字符串为:

"+str3);

}

publicstaticStringgetLongSameString(Stringstr1,Stringstr2)

{

Stringtemp="";

Stringsame="";

StringlongSame="";

for(inti=0;i

{

for(intj=i+1;j<=str1.length();j++)

{

temp=str1.substring(i,j);

if(str2.indexOf(temp)>0)

{

same=temp;

if(longSame.length()

{

longSame=temp;

}

}

}

}

returnlongSame;

}

}

4.12整理字符串,将字符串的前导空白符和后随空白符删去,并将字符串中非空白字符之间的连接的多个空白符只保留一个,而去掉多余的空白符。

程序运行结果:

publicclassWork4_12

{

publicstaticvoidmain(String[]args)

{

Stringstr="ILoveYou";

System.out.println("str="+str);

System.out.println("变换后:

"+deleteBlank(str));

}

publicstaticStringdeleteBlank(Stringstr)

{

chararray[]=str.trim().toCharArray();

Stringresult="";

for(inti=0;i

{

if(!

(array[i]==''&&array[i+1]==''))

result+=array[i];

}

returnresult;

}

}

4.13编写用数组实现大整数的类,提供大整数的加、减、乘等运算。

程序运行结果:

大整数类源文件:

MyBigInteger.java

/**

*大整数类

*@author黎明你好

*/

publicclassMyBigInteger

{

/**能存储的最大位数*/

publicstaticfinalintMAXLENGTH=100;

/**正负号标识*/

privateintsignum=1;

/**实际存储用的数组*/

privateintdataArray[];

/**

*将参数的十进制字符串表示形式转换为BigInteger。

*@paramval-要转换的十进制字符串表示形式。

*/

publicMyBigInteger(Stringval)

{

this.setData(val);

}

/**

*声明一个MAXLENGTH位的,空的大整数类

*/

publicMyBigInteger()

{

dataArray=newint[MyBigInteger.MAXLENGTH];

}

/**

*根据十进制字符串表示形式转换为MyBigInteger的数据

*@paramstr-十进制字符串表示形式。

*/

publicvoidsetData(Stringstr)

{

dataArray=newint[MyBigInteger.MAXLENGTH];

try

{

intend=0;

signum=1;

if(str.charAt(0)=='-')

{

signum=-1;

end=1;

}

intindex=0;

for(inti=str.length()-1;i>=end;i--)

{

dataArray[index++]=Integer.parseInt(String.valueOf(str.charAt(i)));

}

}

catch(NumberFormatExceptione)

{

e.printStackTrace();

}

}

/**

*加法,返回其值为(this+val)的BigInteger。

*@paramval-将添加到此BigInteger中的值。

*@return-this+val

*/

publicMyBigIntegeradd(MyBigIntegerval)

{

MyBigIntegerresult=newMyBigInteger();

if(this.signum>0&&val.signum<0)//正+负:

转化成(正-正)的减法,进行计算

{

returnthis.subtract(val.abs());

}

elseif(this.signum<0&&val.signum>0)//负+正:

转换成(负-负)的减法,进行计算

{

MyBigIntegertemp=val.abs();

temp.signum=-1;

returnthis.subtract(temp);

}

elseif(this.signum>0&&val.signum>0)//正+正:

直接相加,结果为正

result.signum=1;

elseif(this.signum<0&&val.signum<0)//负+负:

直接相加,结果为负

result.signum=-1;

intmaxlength=Math.max(this.length(),val.length());

for(inti=0;i

{

result.dataArray[i]+=this.dataArray[i]+val.dataArray[i];

result.carryBit(i);

}

returnresult;

}

/**

*减法,返回其值为(this-val)的BigInteger。

*@paramval-从此BigInteger中减去的值。

*@return-this-val

*/

publicMyBigIntegersubtract(MyBigIntegerval)

{

MyBigIntegerresult=newMyBigInteger();

//正-负:

转化成(正+正)的加法,进行计算

if(this.signum>0&&val.signum<0)

{

result=this.add(val.abs());

}

//负-正:

转换成(负+负)的加法,进行计算

elseif(this.signum<0&&val.signum>0)

{

MyBigIntegertemp=val.abs();//注意这里,如果直接改变val,会会改观引用原先的对象的属性

temp.signum=-1;

result=this.add(temp);

}

//负-负:

转换成正-正,调换位置

elseif(this.signum<0&&val.signum<0)

{

result=val.abs().subtract(this.abs());

}

//正-正,用大的减小的,符号取决于绝对值大的

elseif(this.signum>0&&val.signum>0)

{

MyBigIntegermax,min;

intsign=pareTo(val);

if(sign==0)//如果相等

returnnewMyBigInteger("0");

elseif(sign>0)

{

max=this;

min=val;

result.signum=1;

}

else

{

max=val;

min=this;

result.signum=-1;

}

for(inti=0;i

{

result.dataArray[i]+=max.dataArray[i]-min.dataArray[i];

result.borrowBit(i);

}

}

returnresult;

}

/**

*乘法,返回其值为(this*val)的BigInteger。

*@paramval-要乘以此BigInteger的值。

*@return-this*val

*/

publicMyBigIntegermultiply(MyBigIntegerval)

{

MyBigIntegerresult=newMyBigInteger();

result.signum=this.signum*val.signum;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1