广东自考JAVA语言程序设计(一)课后习题答案和源代码(第四章).doc_第1页
广东自考JAVA语言程序设计(一)课后习题答案和源代码(第四章).doc_第2页
广东自考JAVA语言程序设计(一)课后习题答案和源代码(第四章).doc_第3页
广东自考JAVA语言程序设计(一)课后习题答案和源代码(第四章).doc_第4页
广东自考JAVA语言程序设计(一)课后习题答案和源代码(第四章).doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章14.9 声明MyDate类14.10 求前n个质数54.11 编写实现从两个字符串中找出最长的相同字符列的代码。64.12 整理字符串74.13 编写用数组实现大整数的类,提供大整数的加、减、乘等运算。8第四章4.9 声明MyDate类,功能:增加1天,增减1月和增加1年的方法;输出MyDate对象日期的方法;求两个MyDate对象日期差的方法。并提供能用当前日期初始化MyDate类对象的构造方法。程序运行结果:源文件:MyDate.javaimport java.util.Calendar;/* * 日历类 * author 黎明你好 */public class MyDatepublic 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 minute, 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 minute, 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);/* * 增减一月 */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 = msel0?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 = 已过去;elseresult = 还有;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 TestMyDatepublic 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(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 黎明你好 */public class Work4_10/* 用来存质数的数组 */private int arrayInt;public Work4_10(int n)arrayInt = new intn;arrayInt0 = 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 % arrayIntj = 0)/用已存入数组中的质数判断boo = false;if (boo)/如果是true 则是指数,存入数组,数组有效长度加1.arrayIntindex = i;index+;/* * 打印数组元素 */public String printArray()String result = ;for (int i = 0; i arrayInt.length; i+)if (arrayInti != 0)result += arrayInti + ;return result;public static void main(String args)Work4_10 w = new Work4_10(100);System.out.println(w.printArray();4.11 编写实现从两个字符串中找出最长的相同字符列的代码。程序运行结果:/* * 找出两个字符串中,最长的相同字符列 * author 黎明你好 */public class Work4_11public static void main(String args)String str1 = 0000abcdef0000;String str2 = 123ab4567cdef789abcdef;String str3 = getLongSameString(str1,str2);System.out.println(str1 = + str1);System.out.println(str2 = + str2);System.out.println(最长的相同字符串为: + str3);public static String getLongSameString(String str1, String str2)String temp = ;String same = ;String longSame = ;for(int i=0; istr1.length();i+)for(int j=i+1; j0)same = temp;if(longSame.length() same.length()longSame = temp;return longSame;4.12 整理字符串,将字符串的前导空白符和后随空白符删去,并将字符串中非空白字符之间的连接的多个空白符只保留一个,而去掉多余的空白符。程序运行结果:public class Work4_12public static void main(String args)String str = I Love You ;System.out.println(str = + str);System.out.println(变换后: + deleteBlank(str);public static String deleteBlank(String str)char array = str.trim().toCharArray();String result = ;for(int i=0; i= end; i-)dataArrayindex+ = Integer.parseInt(String.valueOf(str.charAt(i);catch( NumberFormatException e )e.printStackTrace();/* * 加法,返回其值为(this + val)的BigInteger。 * param val- 将添加到此BigInteger中的值。 * return - this + val */public MyBigInteger add(MyBigInteger val)MyBigInteger result = new MyBigInteger();if (this.signum 0 & val.signum 0)/ 正 + 负:转化成(正 - 正)的减法,进行计算return this.subtract(val.abs();else if (this.signum 0)/ 负 + 正:转换成(负 - 负)的减法,进行计算MyBigInteger temp = val.abs();temp.signum = -1;return this.subtract(temp);else if (this.signum 0 & val.signum 0)/ 正 + 正 :直接相加,结果为正result.signum = 1;else if (this.signum 0 & val.signum 0)/ 负 + 负 :直接相加,结果为负result.signum = -1;int maxlength = Math.max(this.length(), val.length();for (int i = 0; i 0 & val.signum 0)result = this.add(val.abs();/ 负 - 正:转换成(负 + 负)的加法,进行计算else if (this.signum 0)MyBigInteger temp = val.abs();/ 注意这里,如果直接改变val,会会改观引用原先的对象的属性temp.signum = -1;result = this.add(temp);/ 负 - 负 :转换成正- 正,调换位置else if (this.signum 0 & val.signum 0 & val.signum 0)MyBigInteger max, min;int sign = pareTo(val);if (sign = 0)/ 如果相等return new MyBigInteger(0);else if (sign 0)max = this;min = val;result.signum = 1;elsemax = val;min = this;result.signum = -1;for (int i = 0; i max.length(); i+)result.dataArrayi += max.dataArrayi - min.dataArrayi;result.borrowBit(i);return result;/* * 乘法,返回其值为 (this * val)的BigInteger。 * param val - 要乘以此BigInteger的值。 * return - this * val */public MyBigInteger multiply(MyBigInteger val)MyBigInteger result = new MyBigInteger();result.signum = this.signum * val.signum;for (int i = 0; i val.length(); i+)for (int j = 0; j this.length(); j+)result.dataArrayi + j += val.dataArrayi * this.dataArrayj;result.carryBit(i + j);return result;/* * 除法,返回其值为(this / val)的BigInteger。 * param val - 此BigInteger要除以的值。 * return - this / val */public MyBigInteger divide(MyBigInteger val)MyBigInteger result = new MyBigInteger();result.signum = this.signum * val.signum;/ 商的符号MyBigInteger a = this.abs();MyBigInteger b = val.abs();/ 计算a/b;if (a.toString().length() b.toString().length()/ 如果位数,被除数 除数,则商0result.setData(0);else if (a.toString().length() = b.toString().length()/ 位数相同时if (pareTo(b) 0)/ 位数相同,被除数 除数,则商1result.setData(1);else/ 如果位数,被除数 除数,循环计算String dividend = a.toString();/ 被除数的字符串形式String quotient = ;/ 累加商的字符串MyBigInteger c = new MyBigInteger(dividend.substring(0, b.length();/ 初始为被除数的前几位,位数是除数的位数int index = b.length();/ 确定,落位时候,被除数该落下哪位while (index a.length()int bit = -1;/ 累计每次的商值,因为开始总会执行次+,所有把初始设为-1c.setData(c.toString() + dividend.charAt(index+);/ 被除数上,落下一位if (pareTo(b) 0 & index 0)c = c.subtract(b);bit+;c = c.add(b);/ 因为减完检测到为负数了,所有加回来quotient += bit;/ 累加商result.setData(quotient);return result;/* * 取余,返回其值为 (this % val) 的 BigInteger。 * param val- 此 BigInteger 要除以的值和计算所得的余数。 * return - this % val */public MyBigInteger remainder(MyBigInteger val)MyBigInteger result = this.subtract(val.multiply(this.divide(val);return result;/* * 比较大小,将此 BigInteger 与指定的 BigInteger 进行比较 * param val - 将此 BigInteger 与之比较的 BigInteger * return - 当此 BigInteger 在数值上小于、等于或大于 val 时,返回 -1,0,或 1。 */public int compareTo(MyBigInteger val)if (this.signum 0)return -1;else if (this.signum 0 & val.signum 0)return 1;elseMyBigInteger b1 = null;MyBigInteger b2 = null;if (this.signum 0 & val.signum 0 & val.signum 0)b1 = this;b2 = val;for (int i = MyBigInteger.MAXLENGTH - 1; i = 0; i-)if (b1.dataArrayi b2.dataArrayi)return 1;else if (b1.dataArrayi = 0; i-)if (boo = false & dataArrayi != 0)boo = true;str = this.signum 0 ? : -;if (boo)str += dataArrayi;if (str.equals()return 0;elsereturn str;/* * 得到大整数的实际位数,不包括符号 * return - 位数 */public int length()return this.abs().toString().length();/* * 检查进位,做加法时检测 * param i */private void carryBit(int i)if (i MyBigInteger.MAXLENGTH - 1)this.dataArrayi + 1 += this.dataArrayi / 10;this.dataArrayi = this.dataArrayi % 10;/* * 检查借位,做减法时检测 */private void borrowBit(int i)if (i MyBigInteger.MAXLENGTH - 1)if (this.dataArrayi 0)this.dataArrayi = this.dataArrayi + 10;this.dataA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论