result.yuefen(); return result; } /** * 有理数减法。 * @param r - 另一个有理数。 * @return - 返回当前有理数减去参数中的有理数的差。 */ public RationalNumber subtract(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); result.yuefen(); return result; } /** * 有理数乘法。 * @param r - 另一个有理数。 * @return - 返回当前与参数有理数的乘机。 */ public RationalNumber multiply(RationalNumber r) { int a = this.numerator * r.getNumerator(); int b = this.denominator * r.getDenominator(); RationalNumber result = new RationalNumber(); result.setRational(a, b); result.yuefen(); return result; } /** * 有理数除法。 * @param r - 另一个有理数。 * @return - 返回当前与参数有理数的商。 */ public RationalNumber divide(RationalNumber r) { r.setRational(r.getDenominator(), r.getNumerator()); RationalNumber result = this.multiply(r); result.yuefen(); return result; } /** * 约分,化简成分数的最简形式。 */ public void yuefen() { int a = Math.abs(this.numerator);// 分子 int b = Math.abs(this.denominator);// 分母 int small = a < b ? a : b; for (int i = 2; i <= small; i++) { while ((a % i == 0) && (b % i == 0)) {
21
}
a = a / i; b = b / i; } } if (this.numerator < 0) this.numerator = -a; else this.numerator = a; this.denominator = b; } /**
* 返回该有理数的分数表示形式。
* @return - 该有理数的分数表示形式。 */
public String toString() { if (this.numerator == 0) return \; else return this.numerator + \ + this.denominator; } /**
* 返回该有理数的浮点数形式。
* @return - 该有理数的浮点数形式。 */
public double toDouble() { double a = (1.0 * this.numerator) / (this.denominator * 1.0); return a; }
有理数测试类:TestRational.java
程序运行结果:
public class TestRational { public static void main(String[] args) { RationalNumber r1 = null; RationalNumber r2 = null; try { r1 = new RationalNumber(5, 105); r2 = new RationalNumber(8, 18); } catch (Exception e) { System.out.println( e.toString() ); } System.out.print(\有理数1:\ + r1.toString()); r1.yuefen(); System.out.println(\,约分后 = \ + r1.toString());
22
System.out.print(\有理数2:\ + r2.toString()); r2.yuefen(); System.out.println(\,约分后 = \ + r2.toString()); RationalNumber resultAdd = r1.add(r2);// 相加 System.out.print(r1.toString() + \ + r2.toString() + \); System.out.println(resultAdd.toString() + \ + resultAdd.toDouble()); RationalNumber resultSubtract = r1.subtract(r2);//相减 System.out.print(r1.toString() + \ + r2.toString() + \); System.out.println(resultSubtract.toString() + \ + resultSubtract.toDouble()); RationalNumber resultMultiply = r1.multiply(r2);// 相乘 System.out.print(r1.toString() + \?á \ + r2.toString() + \= \); System.out.println(resultMultiply.toString() + \ + resultMultiply.toDouble()); RationalNumber resultDivide = r1.divide(r2);//相除 System.out.print(r1.toString() + \?? \ + r2.toString() + \= \); System.out.println(resultDivide.toString() + \ + resultDivide.toDouble()); } }
23
第四章 数组和字符串
4.1 举例说明如何声明、创建和初始化数组。
答:声明数组:int a[] 或 int[]a
创建数组:a=new int[] 初始化int a[]={1,2,3,4,5}
4.2 举例说明如何声明、创建和初始化数组。
答:声明多维数组:int a[][] 或 int[]a[] 或int[][]a
创建数组:a=new int[][]
初始化int a[][]={{1,2,3,4,5} {6,7,8,9,10}}
4.3 一个数组能够存储不同类型的元素吗?
答:不能。因为数组是将一组相同类型的数据顺序存储,组成一种复合数据类型。 特例:如果将数组声明为Object类型,因为所有数据类型都直接或间接继承自Object父类,所以该数组可存储所有类型的元素。
Object[] objects=new Object[3]; int i=1;
String string=\; boolean b=true; objects[0]=i; objects[1]=string; objects[2]=b;
4.4 编写一个Java 程序,形成以下形式的二维数组,并输出。
1 4 5 16 17 解一:
2 9 3 8 6 7 15 14 18 19 10 11 12 13 20 25 24 23 22 21
public static void main(String args[]) {
int intArray[][] = { { 1, 2, 9, 10, 25 },
{ 4, 3, 8, 11, 24 }, { 5, 6, 7, 12, 23 }, {16, 15, 14, 13, 22 }, {17, 18, 19, 20, 21 } };
for (int i = 0; i <= 4; i++) {
for (int j = 0; j <= 4; j++) {
24
}
}
}
if (intArray[i][j] / 10 == 0)
System.out.print(\ + intArray[i][j] + \); System.out.print(intArray[i][j] + \); else
System.out.println(\);
解二:
public static void main(String[] args) {
int row = 5; // 这里控制输出的行列 请保证行列相等 int[][] a=new int[row][row]; a[0][0] = 1;
int n = 2, zero = 0, change = 1; int value = 2;
for (int i = 1; i < row; i++) {
for (int j = 0; j < (2 * n - 1); j++) { } n++; change++; zero = 0;
if (i % 2 != 0) { }
if (j < (2 * n - 2) / 2) { }
if (j == (2 * n - 2) / 2) { }
if (j > (2 * n - 2) / 2) { }
if (j < (2 * n - 2) / 2) { }
if (j == (2 * n - 2) / 2) { }
if (j > (2 * n - 2) / 2) { }
a[--zero][change] = value++; a[j][j] = value++;
a[change][zero++] = value++; continue;
a[change][--zero] = value++; a[j][j] = value++;
a[zero++][change] = value++; continue;
} else {
25