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

3.6 子类在什么情况下能隐藏超类的成员变量和方法?

解:子类重载父类的成员变量、方法时候。

3.7 在子类中是否允许有一个方法和超类的方法名字相同,而类型不同?

解:不允许。方法重写是指:子类中定义一个方法,并且这个方法的名字、返回类型、参数个数、和类型与从父类继承的方法完全相同。

3.12 以下程序有什么错误?

解:类方法main()调用了类的实例变量,main方法是类方法,不能调用类的实例变量a,导致错误!

3.13 声明一个复数类Complex。实现其基本功能。

复数类:Complex.java

/**

* 复数类

* @author 段智敏 */

public class Complex { private double real;// real为实部 private double image;// image为虚部 public Complex() { real = Double.NaN; image = Double.NaN; } /** * 构造方法 * @param real - 实部 * @param image - 虚部 */ public Complex(double real, double image) { this.real = real; this.image = image; } /** * 取复数实部 * @return - 返回复数的实部 */ public double getReal() { return real; } /** * 设置复数的实部 * @param real - 实部 */ public void setReal(double real) { this.real = real;

16

} /** * 取复数的虚部 * @return - 返回复数的虚部 */ public double getImage() { return this.image; } /** * 设置复数的虚部 * @param image - 虚部 */ public void setImage(double image) { this.image = image; } /** * 设置实虚部 * @param real - 实部 * @param image - 虚部 */ public void setComplex(double real, double image) { this.real = real; this.image = image; } /** * 返回该复数的字符串表示。 * @return - 该复数的字符串表示形式。 */ public String toString() { if (real == Double.NaN && image == Double.NaN) return \; else { String result = new String(this.real + ((image > 0) ? \ : \) + ((image != 0) ? this.image + \ : \)); return result; } } /** * 复数加法, * @param val - 另一个复数 * @return - 当前复数对象与参数指定的复数对象的和 */ public Complex add(Complex val) { Complex result = new Complex (this.real + val.getReal(), this.image + val.getImage()); return result; } /** * 复数减法,当前对象减去参数对象 * @param val - 另一个复数 * @return - 当前复数对象与参数指定的复数对象的差

17

*/ public Complex subtract(Complex val) // ,返回, { Complex result = new Complex (this.real - val.getReal(), this.image - val.getImage()); return result; } /** * 复数乘法 * @param val - 另一个复数 * @return - 当前复数对象与参数指定的复数对象的积 */ public Complex multiply(Complex val) { Complex result = new Complex (); result.setReal(this.real * val.getReal() - this.image * val.getImage()); result.setImage(this.real * val.getImage() + this.image * val.getReal()); return result; } /** * 复数除法 * @param val - 另一个复数 * @return - 当前复数对象与参数指定的复数对象的商 */ public Complex divide(Complex val) { Complex result = new Complex (); result.setReal((this.real * val.getReal() + this.image * val.getImage()) / (val.getReal() * val.getReal() + val.getImage() * val.getImage())); result.setImage((this.image * val.getReal() - this.real * val.getImage()) / (val.getReal() * val.getReal() + val.getImage() * val.getImage())); return result; } }

复数测试类:TestComplex.java

程序运行结果:

/**

* 复数测试类

* @author 段智敏 * */

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

18

{ Complex complex1 = new Complex(2, 4); Complex complex2 = new Complex(3, -1); Complex result = new Complex(); System.out.println(\复数1:\ + complex1.toString() + \;实部\ + complex1.getReal() + \;虚部\ + complex1.getImage()); System.out.println(\复数2:\ + complex2.toString() + \;实部\ + complex2.getReal() + \;虚部\ + complex2.getImage()); result = complex1.add(complex2);// 两个复数之和 System.out.println(\复数:\ + complex1.toString() + \与\ + \复数:\ + complex2.toString() + \之和为:\ + result.toString()); result = complex1.subtract(complex2);// 两个复数之差 System.out.println(\复数:\ + complex1.toString() + \与\ + \复数:\ + complex2.toString() + \之差为:\ + result.toString()); result = complex1.multiply(complex2);// 两个复数乘积 System.out.println(\复数:\ + complex1.toString() + \与\ + \复数:\ + complex2.toString() + \的乘积为:\ + result.toString()); result = complex1.divide(complex2);// 两个复数的商 System.out.println(\复数:\ + complex1.toString() + \与\ + \复数:\ + complex2.toString() + \的商为:\ + result.toString()); } }

3.14 声明一个有理数类RationalNum。要求提供有理数的四则运算,以分数形式输出有理数和以浮点数形式输出有理数等方法。

有理数类:RationalNumber.java

/**

* 有理数类。

* @author 段智敏 */

class RationalNumber { /** numerator分子 */ int numerator; /** denominator分母 */ int denominator; public RationalNumber() { numerator = Integer.MIN_VALUE; denominator = Integer.MIN_VALUE; } /**

19

* 构造方法。 * @param a - 分子。 * @param b - 分母。 * @throws Exception 分母为0异常。 */ public RationalNumber(int a, int b) throws Exception { if (b == 0) { throw new Exception(\发生分母为0的异常,分母不能为0\); } else { this.numerator = a; this.denominator = b; } } /** * 得到分子部分。 * @return - 返回分子部分。 */ public int getNumerator() { return numerator; } /** * 得到分母部分。 * @return - 返回分母部分。 */ public int getDenominator() { return denominator; } /** * 设置有理数的分子,分母。 * @param fenzi - 分子。 * @param fenmu - 分母。 */ public void setRational(int fenzi, int fenmu) { this.numerator = fenzi; this.denominator = fenmu; } /** * 有理数加法。 * @param r - 另一个有理数。 * @return - 返回当前与参数有理数的和。 */ public RationalNumber add(RationalNumber r) { int a = this.numerator * r.getDenominator() + this.denominator * r.getNumerator(); int b = this.denominator * r.getDenominator(); RationalNumber result = new RationalNumber(); result.setRational(a, b);

20