[Câu hỏi con] Ô trống A

Một phần của tài liệu Tài liệu VOL2_04_Q8_C&Java_translated pptx (Trang 57 - 59)

Xem xét điều kiện để "hasNext" trả về true. Câu hỏi đưa ra mô tả sau: "Một số các kí tự “=” được thêm vào cuối chuỗi kí tự đã chuyển đổi sao cho tổng số kí tự là bội nhỏ nhất của 4 và lớn hơn hoặc bằng 4/3 lần số byte đã cho". Do đó, trong khi điều này còn đúng, các kí tự "=" tiếp tục được đưa ra thậm chí cả khi không còn dữ liệu nhị phân nào để chuyển đổi thành kí tự. Sau đó, lớp "EncodeTest" xuất ra các kí tự trong khi "hasNext" là true, vì thế ngay khi số kí tự thu được bởi phương thức "next" nhỏ hơn "bội nhỏ nhất của 4 và lớn hơn hoặc bằng 4/3 lần số byte đã cho”, "hasNext" phải trả về true. Nói cách khác, biến "n" xuất hiện trước ô trống A biểu diễn số kí tự đã thu được bởi phương thức "next". Do đó, ta cần một công thức tính "bội nhỏ nhất của 4 và lớn hơn hoặc bằng 4/3 lần số byte đã cho" cho ô trống A. Bạn phải cẩn thận, trong Java, phép chia một số nguyên bởi một số nguyên, phần thập phân bị cắt bỏ, chỉ đưa ra kết quả cuối cùng là số nguyên. Từ đó có thể tự tìm câu trả lời. Câu trả lời đúng là (b) "(bin.length + 2) /3 * 4".

Lí do thêm 2 vào "bin.length" trước khi chia cho 3 là vì thương chính xác bằng bin.length / 3 nếu "bin.length" là bội của 3 và thương bằng "bin.length / 3 + 1" trong các trường hợp khác. Nhân thương này với 4 cho ta chính xác " bội nhỏ nhất của 4 và lớn hơn hoặc bằng 4/3 lần số byte đã cho".

Ở các lựa chọn khác, (a) và (c) tiến hành nhân 4 trước khi chia cho 3, nên kết quả không thể là bội của 4. (d) sai vì kết quả nhỏ hơn 4/3 lần số byte đã cho.

Ô trống B

Ở đây ta cần tìm điều kiện để khi gọi phương thức "next", ngoại lệ java.util.NoSuchElementException được ném ra. Liên quan tới ngoại lệ là mục (4) của [Mô tả chương trình] trong phần câu hỏi. Ngoại lệ tương ứng được phát sinh "nếu phương thức này được gọi mà không có kí tự nào trả về…". Khi dữ liệu nhị phân được chuyển đổi (pos < bin.length), phương thức "next" chuyển đổi dữ liệu thành kí tự và trả về kí tự thu được. Ngay cả khi không thể chuyển đổi dữ liệu, nó phải tiếp tục xuất ra kí tự "=" cho đến khi đạt được số kí tự yêu cầu vì trong phần câu hỏi có viết: " Một số các kí tự “=” được thêm vào cuối chuỗi kí tự đã chuyển đổi sao cho tổng số kí tự là bội nhỏ nhất của 4 và lớn hơn hoặc bằng 4/3 lần số byte đã cho". Xem xét trong nhóm câu trả lời, không có câu nào thực hiện tính toán như thế. Tuy nhiên, với phần chú giải cho ô trống A ở trên, "hasNext" trả về một giá trị kiểu boolean cho biết đã đạt được tổng số kí tự yêu cầu hay chưa bằng cách tính toán tổng số kí tự. Ta sẽ sử dụng điều này. Nói cách khác, ta sử dụng thực tế là có các kí tự được trả về khi mà hasNext còn đúng. Ô trống B là điều kiện để ném ra ngoại lệ, do đó ta lấy phủ định của "hasNext"; câu trả lời đúng là (a) "!hasNext()".

Tài liệu ôn thi FE Tập 2

Ô trống C

Như đã giải thích cho phần ô trống A và B, phương thức "next" tiếp tục xuất ra các kí tự "=" cho đến khi đạt được số kí tự yêu cầu, dù sau khi dữ liệu byte đã được chuyển đổi đã hết. Ô trống C chứa kí tự đầu ra cho mục đích đó. Chính vì thế, câu trả lời đúng là (b) '='.

Một phần của tài liệu Tài liệu VOL2_04_Q8_C&Java_translated pptx (Trang 57 - 59)

Tải bản đầy đủ (DOC)

(84 trang)
w