作业讲解

  • 格式:doc
  • 大小:71.00 KB
  • 文档页数:7

习题10.定义一个名字为MyRectangle的矩形类,类中有4个私有的整型成员变量,分别是矩形的左上角坐标(xUp,yUp)和右下角坐标(xDown,yDown);类中定义了无参数的构造方法和有4个int参数的构造方法,用来初始化类对象。类中还有以下方法: getW() :计算矩形的宽度; getH() :计算矩形的高度; area() :计算矩形的面积; toString() :把矩形的宽、高和面积等信息作为一个字符串返回。 编写应用程序使用MyRectangle类。

class MyRectangle { private int xUp, yUp, xDown, yDown; public MyRectangle() { xUp = yUp = xDown = yDown = 0; } public MyRectangle(int x1, int y1, int x2, int y2) { xUp = x1; yUp = y1; xDown = x2; yDown = y2; } public int getW() { return Math.abs(xDown - xUp); } public int getH() { return Math.abs(yDown - yUp); } public int area() { return getW() * getH(); } public String toString() { return "Width=" + getW() + ",height=" + getH() + ",area=" + area(); } } public class Test3_10 { public static void main(String[] args) { MyRectangle rect1 = new MyRectangle(); MyRectangle rect2 = new MyRectangle(1, 2, 6, 7); System.out.println(rect1.toString()); System.out.println(rect2.toString()); } }

习题18.实现一个BankTransaction类,允许用户进行如下操作:开立账户,取消账户,把钱存到已经存在的账户中,从已经存在的账户中取钱,把钱从一个账户转移到另一个账户,要求打印出一个或多个已存在的账户的报告。 一个用户能开的账户数不应该有上限,类还应该包含一个方法,如果一个账户超支的话,这个方法自动给出一个警告。最后为BankTransaction类编写一个测试程序。 class ACCount { // 首先定义账号类 private String id; // 账号id private String name; // 储户姓名 private double total; // 账户余额 ACCount(String i, String n, double t) { id = i; name = n; total = t; } public String getId() { return id; } public void setId(String i) { id = i; } public String getName() { return name; } public void setName(String n) { name = n; } public double getTotal() { return total; } public void setTotal(double t) { if (t < 0) System.out.println("金额错误"); else total = t; } public String toString() { return "账号:" + id + ",户名:" + name + ",余额:¥" + total; } } class BankTransaction { // 储户列表以数组方式保存,虽然储户个数不应该有限制, // 但是为了方便,这里还是假设最多100个 private ACCount[] depositors; private int number; // 实际储户个数 public BankTransaction() { depositors = new ACCount[100]; number = 0; } public BankTransaction(ACCount[] depositors, int number) { this.depositors = depositors; this.number = number; } public void creatCount(String i, String n, double t) { // 创建一个账户 ACCount cnt = new ACCount(i, n, t); // 每个账户的id应该通过某种算法生成,以保证唯一性, // 这里为了简化,直接指定账户id depositors[number] = cnt; number++; } public void removeCount(String idn) { // 删除一个账户 int i; for (i = 0; i < number; i++) { // 查找待删除储户所在位置 if (idn.compareTo(depositors[i].getId()) == 0) break; } if (i < number) { depositors[i] = null; // 删除该储户信息 for (; i < number; i++) { // 被删除储户后的储户向前移动一个位置 depositors[i] = depositors[i + 1]; } number--; // 实际储户总数减1 } } public String getCountInfo(String idn) { int i; for (i = 0; i < number; i++) { // 查找储户所在位置 if (idn.compareTo(depositors[i].getId()) == 0) break; } if (i < number) { return "账号:" + depositors[i].getId() + ",户名:" + depositors[i].getName() + ",余额:¥" + depositors[i].getTotal(); } else return "账号不存在!"; } public double fetchMoney(String idn, double money) { // 取钱 int i; for (i = 0; i < number; i++) { // 查找储户所在位置 if (idn.compareTo(depositors[i].getId()) == 0) break; } if (i < number) { if (money <= depositors[i].getTotal()) { depositors[i].setTotal(depositors[i].getTotal() - money); return money; } else System.out.println("账户余额不足"); } else System.out.println("用户不存在"); return 0; } public void saveMoney(String idn, double money) { // 存钱 int i; for (i = 0; i < number; i++) { // 查找储户所在位置 if (idn.compareTo(depositors[i].getId()) == 0) break; } if (i < number) depositors[i].setTotal(depositors[i].getTotal() + money); else System.out.println("用户不存在"); } public void transferMoney(String id1, String id2, double money) { // 把账户1的钱转到账户2 int i, j; for (i = 0; i < number; i++) { // 查找储户1所在位置 if (id1.compareTo(depositors[i].getId()) == 0) break; } for (j = 0; j < number; j++) { // 查找储户2所在位置 if (id2.compareTo(depositors[j].getId()) == 0) break; } if (i < number && j < number) { if (money < depositors[i].getTotal()) { depositors[i].setTotal(depositors[i].getTotal() - money); depositors[j].setTotal(depositors[j].getTotal() + money); } else System.out.println("账户余额不足,无法转帐"); } else System.out.println("至少有一个用户不存在"); }