《Java语言程序设计(一)》课后习题答案全集 下载本文

}

arrayInt[index] = i; index++; } } } /**

* 打印数组元素 */

public String printArray() { String result = \; for (int i = 0; i < arrayInt.length; i++) { if (arrayInt[i] != 0) result += arrayInt[i] + \; } 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_11 { public static void main(String[] args) { String str1 = \; String str2 = \; String str3 = getLongSameString(str1,str2); System.out.println(\ + str1); System.out.println(\ + str2); System.out.println(\最长的相同字符串为:\ + str3); } public static String getLongSameString(String str1, String str2) { String temp = \; String same = \; String longSame = \; for(int i=0; i

31

}

}

if(str2.indexOf(temp)>0) { same = temp; if(longSame.length() < same.length()) { longSame = temp; } } } }

return longSame;

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

程序运行结果:

public class Work4_12 { public static void main(String args[]) {

String str = \; str=str.trim();

StringTokenizer s=new StringTokenizer(str); String newStr=\;

while(s.hasMoreTokens()){ }

System.out.println(\旧字符串:\+str);

newStr=newStr+\+s.nextToken();

System.out.println(\处理后新字符串:\+newStr); } }

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

程序运行结果:

32

大整数类源文件:MyBigInteger.java

/**

* 大整数类

* @author 段智敏 */

public class MyBigInteger { /** 能存储的最大位数 */ public static final int MAXLENGTH = 100; /** 正负号标识 */ private int signum = 1; /** 实际存储用的数组 */ private int dataArray[]; /** * 将参数的十进制字符串表示形式转换为 BigInteger。 * @param val - 要转换的十进制字符串表示形式。 */ public MyBigInteger(String val) { this.setData(val); } /** * 声明一个MAXLENGTH位的,空的大整数类 */ public MyBigInteger() { dataArray = new int[MyBigInteger.MAXLENGTH]; } /** * 根据十进制字符串表示形式转换为MyBigInteger的数据 * @param str - 十进制字符串表示形式。 */ public void setData(String str) { dataArray = new int[MyBigInteger.MAXLENGTH]; try { int end = 0; signum = 1; if (str.charAt(0) == '-') { signum = -1; end = 1; } int index = 0; for (int i = str.length() - 1; i >= end; i--) { dataArray[index++] =

Integer.parseInt(String.valueOf(str.charAt(i))); } } catch( NumberFormatException e ) { e.printStackTrace(); } }

33

/** * 加法,返回其值为(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 && val.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 < maxlength; i++) { result.dataArray[i] += this.dataArray[i] + val.dataArray[i]; result.carryBit(i); } return result; } /** * 减法,返回其值为(this - val)的BigInteger。 * @param val - 从此BigInteger中减去的值。 * @return - this - val */ public MyBigInteger subtract(MyBigInteger val) { MyBigInteger result = new MyBigInteger(); // 正 - 负:转化成(正 + 正)的加法,进行计算 if (this.signum > 0 && val.signum < 0) { result = this.add(val.abs()); } // 负 - 正:转换成(负 + 负)的加法,进行计算 else if (this.signum < 0 && val.signum > 0) { MyBigInteger temp = val.abs();// 注意这里,如果直接改变val,会会改观引用原先的对象的属性 temp.signum = -1; result = this.add(temp); }

34

// 负 - 负 :转换成正- 正,调换位置 else if (this.signum < 0 && val.signum < 0) { result = val.abs().subtract(this.abs()); } // 正 - 正,用大的减小的,符号取决于绝对值大的 else if (this.signum > 0 && val.signum > 0) { MyBigInteger max, min; int sign = this.compareTo(val); if (sign == 0)// 如果相等 return new MyBigInteger(\); else if (sign > 0) { max = this; min = val; result.signum = 1; } else { max = val; min = this; result.signum = -1; } for (int i = 0; i < max.length(); i++) { result.dataArray[i] += max.dataArray[i] - min.dataArray[i]; 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.dataArray[i + j] += val.dataArray[i] * this.dataArray[j]; result.carryBit(i + j); } } return result; } /** * 除法,返回其值为(this / val)的BigInteger。 * @param val - 此BigInteger要除以的值。 * @return - this / val

35