Chương II CÁC KHÁI NIỆM CƠ SỞ TRONG JAVA -bai1
Mục tiêu:
Sử dụng thành thạo các khái niệm của lập trình hướng đối tượng trong lập trình đối với ngôn ngữ lập trình Java.
Mô tả và áp dụng được tính bao đóng (encapsulation), tính kế thừa (inheritance), tính trừu tượng (abstraction), vấn đề đa thừa kế (multiple inheritance) và tính đa hình (polymorphism) trong ngôn ngữ lập trình Java.
Trong đó:
Lớp abstract Hinh có phương thức dienTich()
Xây dựng lớp “HinhTron”, “HinhChuNhat”, bằng cách kế thừa lớp Hinh và viết lại phương thức dienTich để tính diện tích của hình tròn và hình chữ nhật.
Lớp “DanhSachHinh” với các thuộc tính và phương thức sau:
- Có một collection kiểu ArrayList dùng để lưu các đối tượng Hinh bao gồm cả HinhTron và HinhChuNhat.
- Tạo Constructor mặc định để khởi tạo collection và thêm vào 3 hình bất kỳ xác định trước (không nhập từ bàn phím, gồm cả 2 loại hình).
- Phương thức thêm 1 hình cho trước (HinhTron hoặc HinhChuNhat) vào collection (thông số là hình cần thêm).
- Phương thức InDanhSach() in toàn bộ danh mục hình.
Viết lớp Test chứa hàm main, sử dụng đối tượng DanhSachHinh. Tạo menu với các chức năng sau:
- Thêm hình tròn
- Thêm hình chữ nhật
- In danh sách hình
- Đếm số lượng hình chữ nhật
- In ra thông tin hình chữ nhật có diện tích lớn nhất
CODE
Hinh.java
Sử dụng thành thạo các khái niệm của lập trình hướng đối tượng trong lập trình đối với ngôn ngữ lập trình Java.
Mô tả và áp dụng được tính bao đóng (encapsulation), tính kế thừa (inheritance), tính trừu tượng (abstraction), vấn đề đa thừa kế (multiple inheritance) và tính đa hình (polymorphism) trong ngôn ngữ lập trình Java.
Trong đó:
Lớp abstract Hinh có phương thức dienTich()
Xây dựng lớp “HinhTron”, “HinhChuNhat”, bằng cách kế thừa lớp Hinh và viết lại phương thức dienTich để tính diện tích của hình tròn và hình chữ nhật.
Lớp “DanhSachHinh” với các thuộc tính và phương thức sau:
- Có một collection kiểu ArrayList dùng để lưu các đối tượng Hinh bao gồm cả HinhTron và HinhChuNhat.
- Tạo Constructor mặc định để khởi tạo collection và thêm vào 3 hình bất kỳ xác định trước (không nhập từ bàn phím, gồm cả 2 loại hình).
- Phương thức thêm 1 hình cho trước (HinhTron hoặc HinhChuNhat) vào collection (thông số là hình cần thêm).
- Phương thức InDanhSach() in toàn bộ danh mục hình.
Viết lớp Test chứa hàm main, sử dụng đối tượng DanhSachHinh. Tạo menu với các chức năng sau:
- Thêm hình tròn
- Thêm hình chữ nhật
- In danh sách hình
- Đếm số lượng hình chữ nhật
- In ra thông tin hình chữ nhật có diện tích lớn nhất
CODE
Hinh.java
package com.thanhcs.baitap1; public abstract class Hinh { public abstract double Dientich(); }
HinhTron.java
public class HinhTron extends Hinh { private float r; public HinhTron() { } public HinhTron(float r) { super(); this.r = r; } @Override // tu abstract class Hinh public double Dientich() { return 3.14 * r*r; } @Override public String toString() { return "HinhTron [r = " + r + ", Dientich = " + Dientich() + "]"; } }
HinhChuNhat.java
package com.thanhcs.baitap1; public class HinhChuNhat extends Hinh { private float cd, cr; public HinhChuNhat() { } public HinhChuNhat(float cd, float cr) { super(); this.cd = cd; this.cr = cr; } @Override //// tu abstract class Hinh public double Dientich() { return cd*cr; } @Override public String toString() { return "HinhChuNhat [cd = " + cd + ", cr = " + cr +
", Dientich = " + Dientich() + "]"; } }
DanhSachHinh.java
package com.thanhcs.baitap1;
import java.util.ArrayList; import java.util.Scanner; public class DanhSachHinh { private ArrayList<Hinh> listHinh; Scanner sc; public DanhSachHinh() { listHinh = new ArrayList<Hinh>(); listHinh.add(new HinhTron(3.0f)); listHinh.add(new HinhChuNhat(10, 8)); listHinh.add(new HinhChuNhat(1.2f, 3.4f)); } public void Them(Hinh a) { listHinh.add(a); } public void InDanhSach() { for(int i = 0 ; i < listHinh.size() ;i++) { System.out.println(listHinh.get(i).toString()); } } public int demHCN() { int soHCN = 0; for(Hinh p :listHinh) { if(p instanceof HinhChuNhat) //chu y instanceof { soHCN++; } } return soHCN; } public void inHCN_DTlonnhat() { double temp = 0; HinhChuNhat hcnTemp = new HinhChuNhat(); for(Hinh p : listHinh) { if(p instanceof HinhChuNhat) { if(temp < p.Dientich()) { temp = p.Dientich(); hcnTemp = (HinhChuNhat) p; } } } System.out.println("Hcn co dien tich lon nhat la : "
+ hcnTemp.toString()); } }
Test.java
package com.thanhcs.baitap1; import java.util.Random; import java.util.Scanner; public class Test { public static void main(String[] args) { int chon = 0; float rand1 =0, rand2 = 0; //tao 2 so random cho cd, cr hcn or chu vi hinh tron Scanner sc = new Scanner(System.in); //Scanner : nhap tu ban phim Hinh mHinh; boolean flag = true; DanhSachHinh ds = new DanhSachHinh(); System.out.println("Menu Apps"); System.out.println("1.Thêm hình tròn"); System.out.println("2.Thêm hình chữ nhật"); System.out.println("3.In danh sách hình"); System.out.println("4.Đếm số lượng hình chữ nhật"); System.out.println("5.In ra thông tin hình chữ nhật có diện tích lớn nhất."); System.out.println("0.Thoat"); do { chon = sc.nextInt(); switch (chon) { case 0: { flag = false; } break; case 1: { Random ran = new Random(); rand1 = ran.nextFloat()+5;//rand1 khoang tu 1 toi 100; mHinh = new HinhTron(rand1); ds.Them(mHinh); System.out.println("\nThem thanh cong hinh chu tron\nchu vi = "+rand2); } break; case 2: { Random ran = new Random(); rand1 = ran.nextFloat()+4; rand2 = ran.nextFloat()+6;//rand1 khoang tu 1 toi 100; mHinh = new HinhChuNhat(rand1, rand2); ds.Them(mHinh); System.out.println("\nThem thanh cong hinh chu nhat\n cr = "+rand2 + " cd = "+rand1); } break; case 3: { System.out.println("Danh sach hinh:\n"); ds.InDanhSach(); } break; case 4: { System.out.println("So hinh ch u nhat trong ds la : "+ ds.demHCN()); } break; case 5: ds.inHCN_DTlonnhat(); break; default: break; } } while (flag); } }
No comments: