Skip to main content

[Java] Comparator - Assignment

1. Introduction

Xin chào các bạn! Hôm nay, mình sẽ giới thiệu cho các bạn một bài thực hành trên trang cousera.org,  trong bài học liên quan đến lập trình java, Nguyên lý thiết kế phần mềm để chúng ta ôn luyện thêm về phương pháp Sort trên mảng các đối tượng. Sau khi các bạn làm thành thục bài Assignment này, mình tin là các bạn sẽ phân biệt tốt và sử dụng hiệu quả Comparable và Comparator.

Trong toàn bộ assignments này, bạn sẽ bắt đầu với các trường đã được cung cấp, sử dụng hầu hết các class, và chỉ việc chỉnh sửa một vài thứ của chúng mà thôi.

Trước tiên, dưới đây là các lớp đã được cung cấp từ các bài học trước chưa có sự chỉnh sửa:

- Location class, được lấy từ bài học Android và chỉnh sửa để dùng cho khoá học này. Các dữ liệu là geographic location.  Có một hàm constructors sử dụng 2 biến : latitude và longitude và một public method distanceTo.

- QuakeEntry class, dây là một lớp Model Entity, được định nghĩa và sử dụng thông suốt khoá học. Bạn có thể thấy nó bao gồm các thuộc tính cơ bản liên quan đến Quake như : latitude, longitude, magnitude, title, and depth. Nó có một số phương pháp nhận được và một phương pháp toString. Nó cũng có một phương pháp compareTo để sắp xếp động đất theo cường độ (và nhận xét mã đã sắp xếp các trận động đất trước đó theo khoảng cách đến một địa điểm).

- EarthQuakeParser class, từ bài học, có một phương pháp đọc với một tham số String đại diện cho tệp dữ liệu động đất XML và trả về một đối tượng ArrayList của các đối tượng QuakeEntry.

Ngoài ra sẽ có các class mới:

- DifferentSorters class, bao gồm một số phương pháp tương tự như mã được hiển thị trong video để kiểm tra một vài lớp / phương pháp trong bài tập này. Bạn sẽ thêm các phương pháp kiểm tra bổ sung vào lớp này.

- MagnitudeComparator class, thực hiện phép so sánh để cho phép sắp xếp QuakeEntry theo cường độ từ nhỏ đến lớn nhất. Phương pháp này đã được đề cập trong các blog trước đây.

- DistanceComparator class , thực hiện phép so sánh để cho phép sắp xếp QuakeEntry theo khoảng 
cách của chúng đến một vị trí xác định được truyền như một tham số. Phương pháp này cũng đã được đề cập trong một blog trước.

Assignment 1: compareTo Method

Trong bài tập này, bạn sẽ sửa đổi phương pháp compareTo để sắp xếp các trận động đất theo một cách khác.

Cụ thể, đối với công việc này, bạn sẽ:

- Sửa đổi phương thức compareTo trong lớp QuakeEntry. (Bạn có thể muốn bình luận trước mã hiện tại). Phương pháp compareTo nên sắp xếp lần đầu tiên của trận động đất, từ mức nhỏ nhất đến lớn nhất và sau đó phá vỡ mối quan hệ (sử dụng == để xác định độ lớn bằng hay không) theo độ sâu, từ nhỏ nhất (tiêu cực) đến chiều sâu lớn nhất.

- Kiểm tra phương pháp compareTo bằng cách chạy phương thức sortWithCompareTo trong lớp DifferentSorters với bất kỳ tệp dữ liệu nào. Loại được sử dụng là Collections.sort. Bạn sẽ có thể thấy rằng các trận động đất được sắp xếp theo cường độ, và những người có cùng độ lớn được sắp xếp theo chiều sâu. Sửa đổi phương thức này để in QuakeEntry trong ArrayList ở vị trí 10 (thực sự là phần tử thứ 11 trong ArrayList) bằng cách thêm đoạn mã sau vào cuối phương thức này, sau khi phân loại và in ra tất cả các phần tử.

Assignment 2: Title Comparator

Trong bài tập này, bạn sẽ viết một máy so sánh để sắp xếp động đất theo tiêu đề đầu tiên và break ties  theo chiều sâu.

Cụ thể, đối với công việc này, bạn sẽ:

- Viết lớp TitleAndDepthComparator thực hiện một bộ so sánh kiểu QuakeEntry. Trong lớp này bạn nên viết phương pháp so sánh có hai tham số, một QuakeEntry có tên q1 và QuakeEntry có tên q2. Phương pháp này nên so sánh tiêu đề của q1 và q2. Nếu tiêu đề của q1 xuất hiện trước tiêu đề của q2 theo thứ tự bảng chữ cái thì phương pháp này sẽ trả về một số nguyên âm. Nếu tiêu đề của q1 xuất hiện sau tiêu đề của q2, thì phương thức này sẽ trả về một số nguyên dương. Nếu tiêu đề của q1 giống như tên của q2, thì phương pháp này nên so sánh độ sâu của hai trận động đất. Nếu độ sâu của q1 nhỏ hơn độ sâu của q2, thì phương pháp này sẽ trả về một số âm. Nếu độ sâu của q1 lớn hơn độ sâu của q2, thì phương pháp này nên trả về một số nguyên dương. Nếu không, phương pháp này nên trả về 0.

- Viết phương thức void sortByTitleAndDepth trong lớp DifferentSorters. Phương pháp này nên tạo ra một EarthQuakeParser, đọc dữ liệu từ một tệp tin về động đất và tạo một ArrayList của QuakeEntry's. Sau đó, phương pháp này nên gọi Collections.sort trên ArrayList này và sử dụng TitleAndDepthComparator để sắp xếp các trận động đất. Bạn sẽ có thể thấy rằng các trận động đất được sắp xếp theo tiêu đề đầu tiên, và những người có cùng tiêu đề được sắp xếp theo chiều sâu. Sửa đổi phương pháp này để in QuakeEntry trong ArrayList ở vị trí 10 (thực sự là phần tử thứ 11 trong ArrayList) sau khi phân loại và in ra tất cả các phần tử.

Assignment 3: Last Word in Title Comparator

Trong bài tập này, bạn sẽ viết một Comparator để sắp xếp động đất bằng từ cuối cùng trong tựa đề của nó trước tiên và phá vỡ quan hệ theo độ lớn.

Cụ thể, đối với công việc này, bạn sẽ:

- Viết lớp TitleLastAndMagnightComparator thực hiện một bộ so sánh QuakeEntry kiểu. Trong lớp này bạn nên viết phương pháp so sánh có hai tham số, một QuakeEntry có tên q1 và QuakeEntry có tên q2. Phương pháp này nên so sánh từ cuối cùng trong tiêu đề của q1 và q2. Nếu từ cuối của q1 xuất hiện trước từ cuối cùng của q2 theo thứ tự chữ cái, thì phương thức này sẽ trả về một số nguyên âm. Nếu từ cuối của q1 xuất hiện sau từ cuối của q2, thì phương thức này sẽ trả về một số nguyên dương. Nếu từ cuối của q1 giống như từ cuối của q2, thì phương pháp này nên so sánh cường độ của hai trận động đất. Nếu cường độ của q1 nhỏ hơn cường độ của q2, thì phương pháp này sẽ trả về một số âm. Nếu cường độ của q1 lớn hơn độ lớn của q2, thì phương pháp này sẽ trả về một số nguyên dương. Nếu không, phương pháp này nên trả về 0.

- Viết phương thức void sortByLastWordInTitleThenByMagnitude trong lớp DifferentSorters. Phương pháp này nên tạo ra một EarthQuakeParser, đọc dữ liệu từ một tệp tin về động đất và tạo một ArrayList của QuakeEntry's. Sau đó, phương pháp này nên gọi Collections.sort trên ArrayList này và sử dụng TitleLastAndMagnightComparator để sắp xếp các trận động đất. Bạn sẽ có thể thấy rằng các trận động đất được sắp xếp theo từ cuối cùng trong tiêu đề của họ, và những người có cùng một từ cuối được sắp xếp theo độ lớn. Sửa đổi phương pháp này để in QuakeEntry trong ArrayList ở vị trí 10 (thực sự là phần tử thứ 11 trong ArrayList) sau khi phân loại và in ra tất cả các phần tử.

Comments

Popular posts from this blog

[English] Regular Verbs - (ed) Ending.

Today I'am going to talk about how to pronounce the past tense of regular verbs. Regular verbs take the -ed ending in the past. When the final sound of the verb in infinitive form is an unvoiced consonant sound. Case 1: Unvoiced consonant ending -ed =[t] Then the -ed is also pronounced as an unvoiced consonant, and that is the tt, T sound. ex: Pack: [k] is unvoiced so we will talk packed So other unvoiced consonants : [p], [f], [s], [tf], [l], [0] Case 2 : Voiced consonant ending [v], [b], [g], th[e], [z], zd, rr, mm, nn, ng, ll. Then the -ed is also pronounced as an unvoiced consonant, and that is the dd, D sound. Case 3: Verbs ends in [t] or [d]

[java] So Sánh DFS và BFS trong thuật toán tìm kiếm

Khái niệm DFS (Tìm kiếm Độ sâu thứ nhất) và BFS (Tìm kiếm Breadth Đầu tiên) là các thuật toán tìm kiếm được sử dụng cho đồ thị và cây. Khi bạn có cây hoặc đồ thị được sắp xếp, giống như BST, bạn có thể dễ dàng tìm kiếm cấu trúc dữ liệu để tìm nút mà bạn muốn. Tuy nhiên, khi đưa ra một cây hoặc đồ thị không có thứ bậc, thuật toán tìm kiếm BFS và DFS có thể hữu ích để tìm thấy những gì bạn đang tìm kiếm. Quyết định chọn một trong những khác cần được dựa trên loại dữ liệu mà một trong những là làm việc với. Trong một tìm kiếm đầu tiên, bạn bắt đầu từ nút gốc, và sau đó quét từng nút ở mức đầu tiên bắt đầu từ nút trái, di chuyển về phía bên phải. Sau đó, bạn tiếp tục quét mức thứ hai (bắt đầu từ bên trái) và mức thứ ba, v.v ... cho đến khi bạn đã quét tất cả các nút hoặc cho đến khi bạn tìm thấy nút thực mà bạn đang tìm kiếm. Trong một BFS, khi vượt qua một mức độ, chúng ta cần một số cách để biết được các nút nào đi qua khi chúng ta đạt đến cấp độ tiếp theo. Cách này được thực hiện ...

[English] KNOW, MEET, MEET WITH, or MEET UP

Today, I want to talk with you about "meet", "meet with", or "meet up with", and this, in case you are wondering is the past tense of "meet". "know","meet","meet up with", and "meet with", and: What are the differences between those different words? Please see this example : "I knew Kien last week" -> "knew" is the past of "know" and "met" is the past of "meet" so: "I met up with Kien last week." Do you know what is difference between these sentences are? Are there ony ones that have a mistake in them or all these all good sentences? So take a moment and think about it. So let's first look at the difference between these two.  "meet" will be used in case the first time that two people are talking.  Thye don't know each other. We use "meet" when we're meeting somebody for the first time. We will use ...