cỏc trọng lượng đú trong cỏc nhúm cỏch nhau 5 đơn vị (kg).
import java.util.*;
public class NhomTrongluong {
public static void main(String args[]){
// Tạo ra một ỏnh xạ để lưu tần suất của mỗi nhúm Map demNhom = new HashMap();
int nArgs = args.length;
// Đọc cỏc trọng lượng được nhập vào từ đối số và chia nhúm cỏch nhau 5 đơn vị.
for(int i = 0; i < nArgs; i++){
double trongL = Double.parseDouble(args[i]);
Integer nhomTL=new Integer((int)Math.round(trongL/5)*5); Integer demCu = (Integer)demNhom.get(nhomTL);
// Tăng số lần trọng luợng trong cựng nhúm, nếu là lần đõu (demCu = null) thỡ đặt là 1.
Integer demMoi = (demCu == null)?
new Integer(1): new Integer(demCu.intValue()+1); demNhom.put(nhomTL, demMoi);
// Lấy ra tập cỏc giỏ trị từ ỏnh xạ demNhom List keys = new ArrayList(demNhom.keySet()); // Sắp xếp lại theo cỏc nhúm trọng lượng
Collections.sort(keys);
ListIterator keyIterator = keys.listIterator();
// Tỡm tần suất của cỏc trọng lượng được nhập vào trong cỏc nhúm while(keyIterator.hasNext()) {
Integer nhom = (Integer) keyIterator.next(); Integer dem = (Integer) demNhom.get(nhom); int demInt = dem.intValue();
// Sử dụng hàm fill() của lớp Array để tạo ra xõu gồm demInt cỏc dấu ‘*’
char[] bar = new char[demInt]; Arrays.fill(bar, '*');
System.out.println(nhom+"\t" + new String(bar)); }
} }
Dịch và chạy chương trỡnh NhomTrongLuong với cỏc tham số: java NhomTrongLuong 75 72 93 12 34 sẽ cho kết quả: 10 * 35 * 36 ** 95 * Như vậy, nhúm 10 kg cú 1, 35 kg cú 1, 75 kg cú 2 và 95 kg cú 1. 4. SortedSet (tập được sắp) và SortedMap (ỏnh xạ được sắp)
Cỏc cấu trỳc tập hợp (set) và ỏnh xạ (map) cú giao diện đặc biệt là SortedSet và SortedMap như trong hỡnh H6-5 để cài đặt những cấu trỳc cú cỏc phần tử được sắp
theo thứ tự chỉ định. Giao diện SortedSet
SortedSet là giao diện mở rộng của Set cung cấp cỏc hàm để xử lý cỏc tập được sắp.
SortedSet headSet(Object toElem);
Cho lại tập được sắp gồm những phần tử đứng trước toElem.
SortedSet tailSet(Object fromElem);
Cho lại tập được sắp gồm những phần tử cuối đứng sau fromElem.
SortedSet subSet(Object fromElem, Object toElem);
Cho lại tập được sắp gồm những phần tử kể từ fromElem đến toElem.
Object first();Cho lại phần tử đầu tiờn (cực tiểu) của tập được sắp. Object last();Cho lại phần tử cuối cựng (cực đại) của tập được sắp. Comparator comparator()
Cho lại thứ tự so sỏnh của cấu trỳc được sắp, cho null nếu cỏc phần tử được sắp theo thứ tự tự nhiờn (tăng dần)
Giao diện SortedMap
SortedMap là giao diện mở rộng của Map cung cấp cỏc hàm để xử lý cỏc ỏnh xạ được sắp theo thứ tự của khoỏ (key).
SortedMap headMap(Object toKey);Cho lại ỏnh xạ được sắp gồm những phần tử đứng trước toKey.
SortedMap tailMap(Object fromKey);Cho lại ỏnh xạ được sắp gồm những phần tử cuối đứng sau fromKey.
SortedMap subMap(Object fromKey, Object toKey);Cho lại ỏnh xạ được sắp gồm những phần tử kể từ fromKey đến toKey.
Object firstKey();Cho lại phần tử đầu tiờn (cực tiểu) của ỏnh xạ được sắp. Object lastKey();Cho lại phần tử cuối cựng (cực đại) của ỏnh xạ được sắp.
TreeSet và TreeMap
Hai lớp này cài đặt hai giao diện SortedSet và SortedMap tương ứng. Chỳng cú bốn loại toỏn tử tạo lập như sau:
TreeSet()
TreeMap()
Tạo ra những tập hoặc ỏnh xạ mới và rỗng, được sắp theo thứ tự tăng dần
của cỏc phần tử hoặc của khoỏ.
TreeSet(Comparator c) TreeMap(Comparator c)
Tạo ra những tập hoặc ỏnh xạ mới được sắp và xỏc định thứ tự so sỏnh theo c.
TreeSet(Collection c) TreeMap(Map m)
Tạo ra những tập hoặc ỏnh xạ mới được sắp và cú cỏc phần tử lấy từ c hoặc từ m tương ứng.
TreeSet(SortedSet s)
TreeMap(SortedMap m)
Tạo ra những tập hoặc ỏnh xạ mới được sắp và cú cỏc phần tử lấy từ s hoặc từ m tương ứng.
Chương 3
XỬ Lí NGOẠI LỆ
Đối với người lập trỡnh họ cú thể gặp một trong cỏc lỗi sau: 1 Lỗi cỳ phỏp (syntac error)
2 Lỗi logic thuật toỏn
3 Lỗi lỳc thực thi ( runtime error)
- Đối với lỗi cỳ phỏp người lập trỡnh cú thể phỏt hiện và sửa lỗi, dựa vào trỡnh biờn dịch, đõy là lỗi dễ phỏt hiện và sửa chữa, tuy nhiờmn đõy cũng là lỗi gõy khú khăn và chỏn nản đối với người mới học lập trỡnh.
- Đối với lỗi thuật toỏn, đõy là lỗi khú phỏt hiện và sửa chữa nhất, tuy nhiờn trong bài này ta khụng bàn luận về vấn đề này.
- Đối với lỗi lỳc thực thi, ta hoàn toàn cú thể kiểm soỏt được chỳng, thụng thường lỗi runtime thường do nguyờn nhõn khỏch quan như: truy cập vào một ổ đĩa nhưng ổ đĩa này lại chưa sẵn sàng, hay thực hiện phộp chia nhưng mẫu số lại bằng 0, kết nối với mỏy tớnh ở xa nhưng mỏy đú lại khụng tồn tại…, khi một lỗi runtime xẩy ra JVM sẽ phỏt sinh một ngoại lệ, nếu một chương trỡnh khụng cung cấp mó sử lý ngoại lệ cú thể kết thỳc khụng bỡnh thường, trong bài hụm nay ta sẽ bàn về vấn đề sử lý ngoại lệ trong java.
- Mọi lớp biệt lệ trong java đều được dẫn xuất từ lớp cơ sở Throwable, ta cú thể tạo ra lớp ngoại lệ riờng bằng cỏch mở rộng lớp Throwable