1、写出一个复数类,给出加、减、乘法、除方法;
加法
1 2 3 4 5 6 7 8 9 10 11 12 13
|
public static Complex add(Complex a, Complex b) { Complex result = new Complex(); result.real = a.real + b.real; result.imag = a.imag + b.imag; return result; }
|
减法
1 2 3 4 5 6 7 8 9 10 11 12 13
|
public static Complex minus(Complex a, Complex b) { Complex result = new Complex(); result.real = a.real - b.real; result.imag = a.imag - b.imag; return result; }
|
乘法
https://www.shuxuele.com/algebra/complex-number-multiply.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
public static Complex times(Complex first, Complex second) { Complex result = new Complex(); result.real = first.real * second.real - first.imag * second.imag; result.imag = first.imag * second.real + first.real * second.imag; return result; }
|
测试1:
1 2 3 4
| c1 = new Complex(3, 2); c2 = new Complex(1, 7); Complex times = Complex.times(c1, c2); System.out.println(times);
|
运行结果:
测试2:
1 2 3
| c1 = new Complex(1, 1); c2 = new Complex(1, 1); System.out.println(Complex.times(c1, c2));
|
运行结果:
测试3:
1 2 3
| c1 = new Complex(3, 4); c2 = new Complex(0, 1); System.out.println(Complex.times(c1, c2));
|
运行结果:
-4.0+3.0i
共轭
共轭是把中间的正负号改变,像这样:
共轭的一般符号是上面放一条横线:
例子:
除法
复数除法需要用到共轭。
技巧是把上面和下面都乘以下面的共轭。
公式
1
| (A+Bi)/(C+Di)=(A*C+B*D)/(C*C+D*D) + (B*C-A*D)/(C*C+D*D)i
|
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
public static Complex divide(Complex fenZi, Complex fenMu) { Complex result = new Complex(); result.real = (fenZi.real * fenMu.real + fenZi.imag * fenMu.imag) / (fenMu.real * fenMu.real + fenMu.imag * fenMu.imag); result.imag = (fenZi.imag * fenMu.real - fenZi.real * fenMu.imag) / (fenMu.real * fenMu.real + fenMu.imag * fenMu.imag); return result; }
|
验证:
1 2 3 4
| c1 = new Complex(2, 3); c2 = new Complex(4, -5); System.out.println(Complex.divide(c1, c2)); System.out.println((-7 / 41.0) + "+" + (22 / 41.0) + "i");
|
运行结果:
1 2
| -0.17073170731707318+0.5365853658536586i -0.17073170731707318+0.5365853658536586i
|
2、写出一个矩形类,给出 面积和周长方法;
Rectangle_02.java1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| public class Rectangle_02 {
private double length;
private double width;
public Rectangle_02() { }
public Rectangle_02(double length, double width) { this.length = length; this.width = width; }
public double perimeter() { return 2 * (this.length + this.width); }
public double area() {
return this.length * this.width; }
@Override public String toString() { return "Rectangle [length=" + length + ", width=" + width + "]"; }
}
|
测试:
1 2
| Rectangle_02 r = new Rectangle_02(3, 4); System.out.println(r + "的周长=" + r.perimeter() + ",面积=" + r.area());
|
运行结果:
1
| Rectangle [length=3.0, width=4.0]的周长=14.0,面积=12.0
|
3、使用class关键字定义一个表示学生类型的类,类名为Student。
在Student类中定义两个成员变量name和age,分别用来表示姓名和年龄。
其中,name的数据类型为String,变量age的数据类型为int。
在Student类中定义一个表示说话行为的speak()方法,用于输出学生的姓名和年龄。
【练习题】01.类的成员变量:
猜数字游戏:一个类A有一个成员变量v,有一个初值100。定义一个类,对A类的成员变量v进行猜。如果大了则提示大了,小了则提示小了。等于则提示猜测成功。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public class HW_02_01_GuessingNumbers { private static int v = 100;
public static int guessing(int num) { if (num > HW_02_01_GuessingNumbers.v) { return 1; } else if (num == HW_02_01_GuessingNumbers.v) { return 0; } return -1; }
public static void print(int num) { if (HW_02_01_GuessingNumbers.guessing(num) > 0) { System.out.println(num + "大了"); } else if (HW_02_01_GuessingNumbers.guessing(num) == 0) { System.out.println(num + "猜测成功"); } else { System.out.println(num + "小了"); } } }
|
【练习题】02.类的成员变量:
请定义一个交通工具(Vehicle)的类,其中有:
属性:速度(speed),体积(size)等等
方法:移动(move()),设置速度(setSpeed(int speed)),加速speedUp(),减速speedDown()等等.
最后在测试类Vehicle中的main()中实例化一个交通工具对象,并通过方法给它初始化speed,size的值,并且通过打印出来。另外,调用加速,减速的方法对速度进行改变。
匀加速直线运动的速度公式:
$$
v_{t}=v_{0}+a t
$$
【练习题】03.类的成员变量与方法、构造方法
在程序中,经常要对时间进行操作,但是并没有时间类型的数据。那么,我们可以自己实现一个时间类,来满足程序中的需要。
定义名为MyTime的类,其中应有
三个整型成员:时(hour),分(minute),秒(second),为了保证数据的安全性,这三个成员变量应声明为私有。
为MyTime类定义构造方法,以方便创建对象时初始化成员变量。 再定义diaplay方法,用于将时间信息打印出来。
为MyTime类添加以下方法:
1 2 3 4 5 6
| addSecond(int sec) addMinute(int min) addHour(int hou) subSecond(int sec) subMinute(int min) subHour(int hou)
|
分别对时、分、秒进行加减运算。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
public HW_02_03_MyTime addHour(int h) { int temp = this.hour + h; this.hour = temp % 24; return this; }
public HW_02_03_MyTime addMinute(int m) { int temp = this.minute + m; if (temp > 59) { int hour = temp / 60; this.minute = temp % 60; addHour(hour); } else { this.minute = this.minute + m; } return this; }
public HW_02_03_MyTime addSecond(int s) { int temp = this.second + s; if (temp > 59) { int minute = temp / 60; this.second = temp % 60; addMinute(minute); } else { this.second += s; } return this; }
public HW_02_03_MyTime subHour(int h) { int temp = this.hour - h; if (temp < 0) { this.hour = 24 + temp % 24; } else { this.hour = temp; } return this; }
public HW_02_03_MyTime subMinute(int m) { int temp = this.minute - m; System.out.println("temp=" + temp); if (temp < 0) { int hour = -temp / 60; subHour(hour + 1); this.minute = (60 + temp % 60) % 60; } else { this.minute = temp; } return this; }
public HW_02_03_MyTime subSecond(int s) { int temp = this.second - s; if (temp < 0) { int minute = -temp / 60; System.out.println(minute); subMinute(minute); this.second = (60 + temp % 60) % 60; } else { this.second = temp; } return this; }
|
【练习题】04.构造方法
编写Java程序,模拟简单的计算器。
定义名为Number的类,其中有两个整型数据成员n1和n2,应声明为私有。
编写构造方法,赋予n1和n2初始值,
再为该类定义加(addition)、减(subtration)、乘(multiplication)、除(division)等公有成员方法,分别对两个成员变量执行加、减、乘、除的运算。
在main方法中创建Number类的对象,调用各个方法,并显示计算结果。
【练习题】05.构造方法:
编写Java程序,用于显示人的姓名和年龄。
定义一个人类(Person),该类中应该有两个私有属性,姓名(name)和年龄(age)。
定义构造方法,用来初始化数据成员。再定义显示(display)方法,将姓名和年龄打印出来。
在main方法中创建人类的实例,然后将信息显示。
【练习题】06.get方法和set方法
定义一个类,该类有一个私有成员变量,通过构造方法将其进行赋初值,并提供该成员的getXXX()和setXXX()方法
提示:假设有
则有
1 2 3 4 5 6
| public void setName(String name){ this.name = name; } public String getName(){ return this.name; }
|
【练习题】07.构造方法与重载
为“无名的粉”写一个类:class WuMingFen
要求:
1.有三个属性:
- 面码:
String theMa
- 粉的分量(两):
int quantity
- 是否带汤:
boolean likeSoup
2.写一个构造方法,以便于简化初始化过程,如:
WuMingFen f1 = new WuMingFen("牛肉",3,true);
3.重载构造方法,使得初始化过程可以多样化:
WuMingFen f2 = new WuMingFen("牛肉",2);
4.如何使得下列语句构造出来的粉对象是酸辣面码、2两、带汤的?
WuMingFen f3 = new WuMingFen();
5.写一个普通方法:check()
,用于查看粉是否符合要求。即:将对象的三个属性打印在控制台上。
【练习题】08.构造方法的重载:
定义一个名为Vehicles(交通工具)的基类,
该类中应包含String类型的成员属性brand(商标)和color(颜色),
还应包含成员方法run(行驶,在控制台显示“我已经开动了”)和
showInfo(显示信息,在控制台显示商标和颜色),
并编写构造方法初始化其成员属性。
编写Car(小汽车)类继承于Vehicles类,
编写Truck(卡车)类继承于Vehicles类,
【练习题】09.构造方法与重载
定义一个网络用户类,要处理的信息有
在建立类的实例时,把以上三个信息都作为构造函数的参数输入,其中
用户ID和用户密码时必须的,
缺省的email地址是==用户ID==加上字符串”@gameschool.com”
【练习题】10.构造方法与重载、包
编写Addition类,该类中应包含一组实现两数相加运算的重载方法。 实现加法运算的方法,应接受两个参数(即加数和被加数),方法将两个参数进行加法运算后,返回相加结果。考虑可能针对不同的数据类型进行计算,重载一组方法,包括整型、长整型、浮点型、双精度浮点型、还有字符串。 在main方法中创建Addition类的实例,分别调用重载方法测试其效果。 应将Addition类打入到包中,以自己名字的拼音为包命名。
【练习题】11.构造方法与重载
将上次练习题三中编写的MyTime类打到以自己名字的拼音命名的包中,并为该类重载一组构造方法,以方便使用者能够以多种形式初始化该类的实例。
【练习题】12.构造方法与重载
建立一个汽车类,包括轮胎个数,汽车颜色,车身重量等属性。并通过不同的构造方法创建事例。
至少要求:汽车能够加速,减速,停车。
要求:命名规范,代码体现层次,有友好的操作提示。
【练习题】13.构造方法与重载
创建一个类,为该类定义三个构造函数,分别执行下列操作:
1、传递两个整数值并找出其中较大的一个值
2、传递三个double值并求出其乘积
3、传递两个字符串值并检查其是否相同
4、在main方法中测试构造函数的调用