7(类和对象)编程

更新时间:2023-11-30 16:56:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

7.1(矩形类Rectangle)编写名为Rectangle的类表示矩形,这个类包括: ? 两个double类型的数据域width和height表示矩形的宽和高,它们的默认值都为1;

? String类型的数据域color表示矩形的颜色,进一步假设所有矩形的颜色都是相同的,默认颜色为白色; ? 无参构造方法创建默认矩形;

? 一个构造方法创建指定width和height的矩形; ? 所有三个数据域的访问器和修改器方法; ? getArea()方法返回该矩形的面积; ? getPerimeter()方法返回它的周长;

编写一个测试程序,创建两个Rectangle对象,设置第一个对象的宽为4,高为40,第二个对象的宽为3.5,高为35.9,所有Rectangle对象的颜色为红色。显示两个对象的属性并求它们的面积和周长。 7.2(风扇类Fan)设计一个名为Fan的类模拟风扇。这个类包括: ? 三个常量SLOW,MEDIUM,和FAST,其值分别为1,2,3,表示风扇的速度;

? int类型的数据域speed表示风扇的速度(默认值为SLOW); ? boolean类型的数据域on表示风扇是否打开(默认值为false); ? double类型的数据域radius表示风扇的半径(默认值为5); ? String类型的数据域color表示风扇的颜色(默认值为blue); ? 无参构造方法创建默认风扇; ? 四个参数的访问器和修改器方法;

? toString()方法返回描述风扇的字符串。如果风扇打开,该方法用一个组合的字符串返回风扇的速度、颜色和半径;否则,用一个组合的字符串和“fan is off”一起返回风扇的颜色和半径。 编写一个测试程序,创建两个Fan对象,将第一个对象设置为最大速度,半径为10,颜色为yellow,打开状态;第二个对象为中等速度,半径为5,颜色为blue,关闭状态。通过调用toString方法显示该对象。

7.3(账户类Account)设计一个名为Account的类模拟账户,它包括: ? int类型数据域id表示帐号(默认值为0);

? double类型数据域balance表示账户余额(默认值为0); ? double类型数据域annualInterestRate存储当前年利率(默认值为0);

? Date型数据域dateCreated存储账户开户的日期; ? 无参构造方法创建一个默认的账户;

? id,balance和annualInterestRate的访问器和修改器; ? dateCreated的访问器;

? getMonthlyInterestRate()方法返回月利率; ? withDraw方法从账户提取特定数额的款; ? deposite方法向账户存特定数额的款;

编写一个测试程序,创建一个帐号为1122、余额为20000、年利率为4.5%的Account对象。使用withDraw方法提款2500美元,使用deposite方法存款3000美元,并打印余额和月利率,以及该账户的开

户日期。

7.4(股票类Stock)设计名为Stock的类模拟股票,该类包括: ? String 类型数据域symbol表示股票代号; ? String类型数据域name表示股票的名称;

? double型数据域previousClosingPrice存储前一天的股票价格; ? double型数据域currentPrice存储当前时间的股票价格; ? 一个构造方法根据指定的股票代号和名称创建股票; ? 所有数据域的访问器方法;

? previousClosingPrice和currentPrice的修改器方法;

? changePercent()方法返回从previousClosingPrice变为currentPrice的百分比;

? 编写一个测试程序创建Stock对象,其股票代号为SUNW、名称为SunMicrosystem Inc.、上期收盘价为100。设置新的当前价为90,显示价格变化百分比。

7.5(使用GregorianCalendar类)Java API在包java.util中有一个GregorianCalendar类,使用它可以得到日期的年月日。它的无参构造方法构建一个当前日期的实例,get(GregorianCalendar.YEAR), get(GregorianCalendar.MONTH) ,get(GregorianCalendar.DAY_OF_MONTH)方法返回年、月和日。编写程序测试这个类,显示当前日期的年月日。

7.6(显示日历)重写类PrintCalendar,在信息对话框中显示日历。因为输出是由该类中多个静态方法产生的,所以,应该定义一个静态String

型变量output存储输出结果,并在信息对话框中显示它。

public class PrintCalendar { /** Main method */

public static void main(String[] args) { // Prompt the user to enter year

String yearString = JOptionPane.showInputDialog( \);

// Convert string into integer

int year = Integer.parseInt(yearString);

// Prompt the user to enter month

String monthString = JOptionPane.showInputDialog( \);

// Convert string into integer

int month = Integer.parseInt(monthString);

// Print calendar for the month of the year printMonth(year, month); }

/** A stub for printMonth may look like this */

public static void printMonth(int year, int month) { System.out.print(month + \ + year); }

/** A stub for printMonthTitle may look like this */

public static void printMonthTitle(int year, int month) { }

/** A stub for getMonthName may look like this */ public static String getMonthName(int month) { return \; // a dummy value }

/** A stub for getMonthNmae may look like this */ public static int getStartDay(int year, int month) { return 1; // a dummy value }

/** A stub for getNumberOfDaysInMonth may look like this */

public static int getNumberOfDaysInMonth(int year, int month) {

return 31; // a dummy value }

/** A stub for getTotalNumberOfDays may look like this */

public static int getTotalNumberOfDays(int year, int month) { return 10000; // a dummy value }

/** A stub for getTotalNumberOfDays may look like this */ public static boolean isLeapYear(int year) { return true; // a dummy value } }

7.7(时间类Time)设计名为Time的类。该类包含: ? 数据域hour、minute和second表示时间;

? 无参构造方法为当前时间创建Time对象;(数据域的值表示当前的时间)

? 一个构造方法在指定以毫秒表示的、从1970年1月1日午夜开始已逝去的时间时,创建一个Time对象;(数据域的值表示该时间) ? 三个get方法分别获得数据域hour,minute,和second;

编写测试程序创建两个Time对象(使用new Tme()和new Time(5555500000)),并显示它们的小时、分钟和秒。

提示 无参构造方法可以使用当前时间,当前时间可以通过System.currentTimeMillis()获得。另外一个构造方法为指定逝去的时间设置小时、分钟和秒的值。例如,如果逝去的时间为5555500000毫秒,那么小时为10,分钟为19,秒为10; 7.8(课程类Course)在程序清单

1 public class Course { 2 private String name;

3 private String[] students = new String[100]

4 private int numberOfStudents; 5

6 public Course(String name) { 7 this.name = name; 8 } 9

10 public void addStudent(String student) { 11 students[numberOfStudents] = student; 12 numberOfStudents++; 13 } 14

15 public String[] getStudents() { 16 return students; 17 } 18

19 public int getNumberOfStudents() { 20 return numberOfStudents; 21 } 22

23 public String getName() { 24 return name; 25 } 26 }

数组的大小是固定的,对它进行改进,通过创建新的更大的数组并复制当前数组的内容来实现数组尺寸的自动增长。 7.9(整数类MyInteger)设计名为MyInteger的类,它包括: ? int 数据域value存储该对象表示的int值;

? 一个构造方法,当指定int值时,创建MyInteger对象; ? 一个get方法返回int的值;

? 静态方法isEven(),isOdd()和isPrime(),如果value的值为偶数,奇数,或素数时返回true; ? 静态方法

isEven(MyInteger),isOdd(MyInteger)和

isPrime(MyInteger),如果指定的值为偶数,奇数,或素数时返回true; ? equals(int)和equals(MyInteger)方法,如果该对象的值与指定的值

相等,返回true;

? 静态方法parseInt(int)将字符串转变成int值; 编写测试程序运行该类中的所有方法。

7.10改写以下Loan类,增加两个计算月支付额和总支付额的静态方法,如下所示:

1 public class Loan {

2 private double annualInterestRate; 3 private int numberOfYears; 4 private double loanAmount;

5 private java.util.Date loanDate; 6

7 /** Default constructor */ 8 public Loan() {

9 this(7.5, 30, 100000); 10 } 11

12 /** Construct a loan with specified annual interest rate, 13 number of years and loan amount 14 */

15 public Loan(double annualInterestRate, int numberOfYears, 16 double loanAmount) {

17 this.annualInterestRate = annualInterestRate; 18 this.numberOfYears = numberOfYears; 19 this.loanAmount = loanAmount; 20 loanDate = new java.util.Date(); 21 } 22

23 /** Return annualInterestRate */

24 public double getAnnualInterestRate() { 25 return annualInterestRate; 26 } 27

28 /** Set a new annualInterestRate */

29 public void setAnnualInterestRate(double annualInterestRate) { 30 this.annualInterestRate = annualInterestRate; 31 } 32

33 /** Return numberOfYears */

34 public int getNumberOfYears() {

35 return numberOfYears; 36 } 37

38 /** Set a new numberOfYears */

39 public void setNumberOfYears(int numberOfYears) { 40 this.numberOfYears = numberOfYears; 41 } 42

43 /** Return loanAmount */

44 public double getLoanAmount() { 45 return loanAmount; 46 } 47

48 /** Set a newloanAmount */

49 public void setLoanAmount(double loanAmount) { 50 this.loanAmount = loanAmount; 51 } 52

53 /** Find monthly payment */

54 public double getMonthlyPayment() {

55 double monthlyInterestRate = annualInterestRate / 1200; 56 return loanAmount * monthlyInterestRate / (1 -

57 (Math.pow(1 / (1 + monthlyInterestRate), numberOfYears * 12))); 58 } 59

60 /** Find total payment */

61 public double getTotalPayment() {

62 return getMonthlyPayment() * numberOfYears * 12; 63 } 64

65 /** Return loan date */

66 public java.util.Date getLoanDate() { 67 return loanDate; 68 } 69 }

public static double monthlyPayment(double annualInterestRate,

int numOfYears, double loanAmount)

public static double totalPayment(double annualInterestRate, int numOfYears, double loanAmount)

编写测试程序运行所有方法。

7.11(平面点的类MyPoint)设计名为MyPoint的类表示一个具有x坐标和y坐标的点,该类包括: ? 两个数据域x和y表示坐标; ? 无参构造方法创建点(0,0);

? 一个构造方法根据指定坐标创建一个点; ? 两个get方法分别得到数据域x和y;

? distance方法返回MyPoint类型的两个点之间的距离;

? distance方法返回从这一点到另一个指定x和y坐标的点之间的距离;

编写测试程序创建两个点(0,0)和(10,30.5),并显示它们之间的距离。 7.12(显示素数因子)编写程序,读入一个正整数并按降序显示它的所有素数因子。例如,输入的整数为120,显示的素数因子为5,3,2,2,2。使用

StackOfIntegers

类存储因子(如2,2,2,3,5),提取并按

倒序显示这些因子。

1 public class StackOfIntegers { 2 private int[] elements; 3 private int size;

4 public static final int DEFAULT_CAPACITY = 16; 5

6 /** Construct a stack with the default capacity 16 */ 7 public StackOfIntegers() { 8 this(DEFAULT_CAPACITY);

9 } 10

11 /** Construct a stack with the specified maximum capacity */ 12 public StackOfIntegers(int capacity) { 13 elements = new int[capacity]; 14 } 15

16 /** Push a new integer into the top of the stack */ 17 public int push(int value) {

18 if (size >= elements.length) {

19 int[] temp = new int[elements.length * 2];

20 System.arraycopy(elements, 0, temp, 0, elements.length); 21 elements = temp; 22 } 23

24 return elements[size++] = value; 25 } 26

27 /** Return and remove the top element from the stack */ 28 public int pop() {

29 return elements[——size]; 30 } 31

32 /** Return the top element from the stack */ 33 public int peek() {

34 return elements[size - 1]; 35 } 36

37 /** Test whether the stack is empty */ 38 public boolean empty() { 39 return size == 0; 40 } 41

42 /** Return the number of elements in the stack */ 43 public int getSize() { 44 return size; 45 } 46 }

7.13(显示素数)编写程序,按降序显示所有小于120的素数。使用

StackOfIntegers

类存储这些素数(如2,3,5,7…)提取并按倒序显示

它们。

本文来源:https://www.bwwdw.com/article/qedt.html

Top