学习Java的第三周
Java基础语法都熟悉了两周的菜鸡,终于开始了下一阶段的学习了,废话不多说,题目+代码。
Ch3Demo1
1.编写程序,定义一个类Ch3Demo1:利用方法的重载,完成以下方法。
(1)第一个方法是public int max(int x,int y),用于计算两个整数的最大值。
(2)第二个方法是public double max(double x,double y),用于计算两个double型数据的最大值。
(3)第三个方法是public double max(int x,double y),用于计算一个整数和一个double型数据的最大值。
(4)第四个方法是public double max(int x,int y,int z ),用于计算三个整数的最大值。
编写测试方法(main)分别去调用一个对象的这些方法来完成测试。
public int max(int x, int y) {
return x>y?x:y;
}
public double max(double x, double y) {
return x>y?x:y;
}
public double max(int x, double y) {
return x>y?x:y;
}
public double max(double x, int y) {
return x>y?x:y;
}
public double max(int x, int y, int z) {
return (x>y?x:y)>z?(x>y?x:y):z;
}
public static void main(String[] args) {
Ch3Demo1 c1 = new Ch3Demo1();
double b = c1.max(8, 9, 6);
int c = c1.max(7, 8);
System.out.println(c);
System.out.println(b);
}
方法的重载,与C/C++相比没有啥区别。
Ch3Demo2
- 设计一个矩形类Ch3Demo2,这个类包括:
(1)两个名为width和height的double型数据域,它们分别表示矩形的宽和高。width和height的默认值都为1;
(2)创建一个默认矩形的无参构造方法;
(3)一个创建width和height为指定值的矩形的构造方法;
(4)一个名为getArea()的方法返回这个矩形的面积;
(5)一个名为getPerimeter()的方法返回周长。
public double width = 1;
public double height = 1;
public Ch3Demo2() {
}
public Ch3Demo2(double width, double height) {
super();
this.width = width;
this.height = height;
}
public double getArea() {
return width*height;
}
public double getPerimeter() {
return 2*(width+height);
}
重载构造方法。
Ch3Demo3
3.设计一个股票类Ch3Demo3,这个类包括:
(1)一个名为symbol的字符串数据域表示股票代码;
(2)一个名为name的字符串数据域表示股票的名字;
(3)一个名为previousClosingPrice的double型数据域,它存储的是前一日的股票值;
(4)一个名为currentPrice的double型数据域,它存储的是当时的股票值。
(5)一个名为getChangePercent()的方法,返回从previousClosingPrice到currentPrice的变化的百分比。
public class Ch3Demo3 {
// 类的属性
private String symbol;
private String name;
private double previousClosingPrice;
private double currentPrice;
//无参构造方法
public Ch3Demo3() {
}
//有参构造方法
public Ch3Demo3(String symbol, String name, double previousClosingPrice, double currentPrice) {
super();
this.symbol = symbol;
this.name = name;
this.previousClosingPrice = previousClosingPrice;
this.currentPrice = currentPrice;
}
//访问器及修改器
public String getSymbol() {
return symbol;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPreviousClosingPrice() {
return previousClosingPrice;
}
public void setPreviousClosingPrice(double previousClosingPrice) {
this.previousClosingPrice = previousClosingPrice;
}
public double getCurrentPrice() {
return currentPrice;
}
public void setCurrentPrice(double currentPrice) {
this.currentPrice = currentPrice;
}
//计算变化百分比
public double getChangePercent() {
return (currentPrice - previousClosingPrice) / previousClosingPrice;
}
public static void main(String[] args) {
Ch3Demo3 sym = new Ch3Demo3("1101", "阿里巴巴", 271.00, 277.96);
System.out.println(sym.getChangePercent() * 100 + "%");
}
}
个人认为练手题,作者比较懒,以后练手题就只写题目和自己敲得代码了。
Ch3Demo4
4.设计一个秒表Ch3Demo4的类,该类包含:
(1)具有访问器方法的私有数据域startTime和endTime;
(2)一个无参构造方法,使用当前时间来初始化startTime;
(3)一个名为start()方法,将startTime重设为当前时间;
(4)一个名为Stop()方法,将entTime设置为当前时间;
(5)一个名为getElapsedTime()的方法,以毫秒为单位返回秒表记录的流逝时间。
private long startTime;
private long endTime;
//构造方法
public Ch3Demo4() {
startTime = System.currentTimeMillis();
}
//访问器
public long getStartTime() {
return startTime;
}
public long getEndTime() {
return endTime;
}
public void start(){
startTime = System.currentTimeMillis();//获取当前时间为开始时间
}
public void stop(){
endTime=System.currentTimeMillis();//获取当前时间为停止时间
}
public long getElapsedTime(){
return endTime-startTime;
}
public static void main(String[] args) {
Ch3Demo4 c1=new Ch3Demo4();
c1.start();
//以下为测试区域,以下区域可放任何需要测试运行时间的代码
int sum=0;
for(int i = 0;i < 100000000;i ++) {
sum += 1000;
}
//测试区域结束
c1.stop();
System.out.println(c1.getElapsedTime());
}
这一题不是非常水,学到了一个获取当前时间的方法System.currentTimeMillis()
这个方法有两个需要注意的地方
1.这个方法所获取的时间是中间时区的毫秒数。转换为中国时间也就是需要向前推8小时。
2.这个方法获取的是从1970-01-01 00:00:00到现在的时间。
Ch3Demo5
5.设计一个类Ch3Demo5,它包括:
(1)一个名为id的int类型私有数据域,默认值0;
(2)一个名为balance的double类型私有数据域,默认值0;
(3)一个名为annualInterestRate的double类型私有数据域存储当前利率,默认值0。假设所有的帐户都有相同的利率。
(4)一个名为dateCreated的Date类型的私有数据域,存储账户的开户日期;
(5)一个用于创建默认帐户的无参构造方法;
(6)一个用于创建带特定id和初始余额的帐户的构造方法;
//数据域默认就是私有,无需加关键字private
int id = 0;
double balance = 0;
double annualInterestRate = 0;
Date dateCreated;
//创建默认帐户的无参构造方法
public Ch3Demo5() {
dateCreated = new Date(System.currentTimeMillis());
}
//创建带特定id和初始余额的帐户的有参构造方法
public Ch3Demo5(int id, double balance) {
super();
this.id = id;
this.balance = balance;
this.dateCreated = new Date(System.currentTimeMillis()); //创建账户的时间
}
// 访问器和修改器
// id的访问器
public int getId() {
return id;
}
// id的修改器
public void setId(int id) {
this.id = id;
}
// balance的访问器
public double getBalance() {
return balance;
}
// balance的修改器
public void setBalance(double balance) {
this.balance = balance;
}
// annualInterestRate的访问器
public double getAnnualInterestRate() {
return annualInterestRate;
}
// annualInterestRate的修改器
public void setAnnualInterestRate(double annualInterestRate) {
this.annualInterestRate = annualInterestRate;
}
// dateCreated的访问器
public Date getDateCreated() {
return dateCreated;
}
// 返回月利率的方法
public double getMonthlyInterestRate() {
return annualInterestRate / 12;
}
//取钱的方法
public void withDraw(double money) {
if (balance >= money) {
balance -= money;
} else {
System.out.println("余额不足!");
}
}
//存钱的方法
public void deposit(double money) {
balance += money;
}
//test
public static void main(String[] args) {
Ch3Demo5 c = new Ch3Demo5(1122, 20000);
c.setAnnualInterestRate(0.045);
System.out.println("余额:" + c.getBalance());
//取3000
c.withDraw(3000);
//存2500
c.deposit(2500);
System.out.println("存取操作后余额:" + c.getBalance());
System.out.println("月利息:" + c.getAnnualInterestRate());
System.out.println("这个帐户的创建时间是:" + c.getDateCreated());
}
学习到一个Date类对象的使用,又一种输出时间的方法。