Hiển thị các bài đăng có nhãn java. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn java. Hiển thị tất cả bài đăng
15 tháng 10 2006

Mảng là một thành phần không thể thiếu trong bất kì ngôn ngữ lập trình nào, Java cũng vậy. Việc tạo và sử dụng một mảng trong Java là vô cùng đơn giản nhưng trong một vài trường hợp, lại chứa đựng những hạn chế. Ví dụ như, bạn cần chứa một danh sách các từ do người dùng thêm vào, hay một danh sách các nhân viên trong công ty nào đó, hay đại loại như vậy. Trong những trường hợp này, bạn không thể biết chính xác mảng sẽ chứa bao nhiêu phần tử, vì thế, không thể sử dụng mảng. Thay vào đó, hãy sử dụng lớp ArrayList, một lớp có công dụng hoàn toàn tương tự như một array nhưng có khả năng tự mở rộng kích thước của nó.

Cách sử dụng lớp ArrayList thì đơn giản mà sách viết về nó thì vô kể nên mình sẽ không nói lại nữa mà sẽ đi vào mục đích chính của bài này, đó là mở rộng nó. Giả sử rằng, bạn cần viết một chương trình quản lí sinh viên chẳng hạn. Một cách bình thường, bạn sẽ phải viết một lớp kiểu như Student với các thuộc tính như tên, tuổi, giới tính... rồi sau đó quản lí chúng trong chương trình với một mảng kiểu Student[] hay một đối tượng ArrayList để quản lí tất cả các sinh viên. Vì số sinh viên có thể là đủ kiểu, có thể lúc này nhiều, lúc này ít,... nên sử dụng ArrayList trong trường hợp này là thích hợp hơn dùng Student[]. Cho tới lúc này, vẫn chưa có gì khó khăn cả B-). Tuy nhiên, việc hay làm nhất của loại chương trình như thế này là giải quyết những yêu cầu kiểu như tìm tất cả những sinh viên có tên là Bình trong toàn bộ sinh viên chẳng hạn. OK, việc này cũng chẳng có gì khó khăn, bạn chỉ cần viết thêm một phương thức, từa tựa thế này là xong:

Thế nếu bây giờ bạn tìm tất cả những sinh viên có tên là An thì làm thế nào? Ồ, chỉ cần sửa lại phương thức trên một chút là xong:

Vẫn chưa có gì khó khăn nhỉ :D ? Thế nếu bây giờ bạn không muốn tìm theo tên mà là tìm tất cả những sinh viên 20 tuổi thì sao nhỉ? Code tiếp chứ sao, viết thêm một phương thức nữa vậy:

Xong rồi hả, vậy bây giờ bạn lại muốn tìm tất cả sinh viên nam thì sao nhỉ? Rồi tất cả sinh viên nam tên Bình tuổi dưới 20, một sinh viên nữ 21 tuổi đầu tiên bắt gặp trong danh sách, hay tất cả sinh viên không phải tên Bình,... thì sao nhỉ? Có lẽ tới lúc này thì cách giải quyết trên đây đã trở thành vô tác dụng và nên lên đường vào sọt rác thì hơn. Phải có cách giải quyết tốt hơn cho những vấn đề kiểu như trên. Tiếc thay, Java không hỗ trợ cho chúng ta trong những vấn đề như thế này (hay là có mà mình không biết nhỉ), đành phải tự tìm giải pháp vậy.

Thử nhìn lại 3 phương thức đã viết trên đây, bạn có thấy chúng giống nhau? Vâng, chúng hoàn toàn tương tự nhau, chỉ có duy nhất một yếu tố khác biệt, đó là câu lệnh if(...){}, là điều kiện để xác định xem một phần tử có thõa mãn yêu cầu hay không. Nhận xét này đưa đến một cách giải quyết khác, với một ý tưởng bắt nguồn từ Prototype.js framework.

Trước tiên, ta hãy tạo một Interface có tên là Condition như sau:

Sau đó tạo một lớp chứa mới kế thừa lớp ArrayList và thêm vào các phương thức của chúng ta:

Giải thích một chút về ý nghĩa của các phương thức:

    • find(Condition cond): tìm phần tử đầu tiên thỏa mãn điều kiện cond và trả về nó, nếu không có phần tử nào trong ArrayList thõa thì trả về null.
      findAll(Condition cond): trả về một đối tượng thuộc lớp MyArrayList chứa tất cả các phần tử trong ArrayList thõa mãn điều kiện cond.
      reject(Condition<E> cond):trả về một đối tượng thuộc lớp MyArrayList chứa tất cả các phần tử trong ArrayList không thõa mãn điều kiện cond.
      partition(Condition<E> cond):trả về một mảng 2 phần tử là đối tượng thuộc lớp MyArrayList, MyArrayList thứ nhất chứa tất cả các phần tử trong ArrayList thõa mãn điều kiện cond, MyArrayList thứ 2 chứa các phần tử còn lại.
  • Ví dụ sử dụng lớp MyArrayList:

    Tới lúc này thì mọi việc có lẽ đã thật sự trở nên dễ dàng hơn rồi nhỉ?

    06 tháng 10 2006

    My Java programe: Word Reminder

    Thử chương trình này giùm tôi: Word Reminder

    WordReminder screenshot

    Cách đây hơn 1 tuần thì mình bắt đầu chuyển sang học từ mới Anh văn bằng cách sử dụng phần mềm, theo như cách mà thằng Huy vẫn học. Tuy nhiên, cái chương trình mà mình sử dụng có nhiều điểm thật sự bất tiện như: không thể nhập tiếng Việt có dấu, không thể nhập từ có khoảng trống, không có phân loại từ theo chủ đề,... Một chương trình khác cũng đã được thử, và nó vẫn tiếp tục không làm mình thõa mãn, nó hoàn toàn không thể hiển thị được tiếng Việt (chắc là nó nghĩ phần mềm học tiếng Anh thì chỉ cần tiếng Anh là đủ quá :-/ ). Vì thế mình đi đến quyết định: tự viết lấy một chương trình để học từ mới vậy B-) .

    Quyết định xong, mục tiêu đã có nhưng thực hiện nó thì thật không dễ dàng gì. Vấn đề đầu tiên là ngôn ngữ nào sẽ được dùng, Java, Flash hay là xây dựng theo kiểu ứng dụng web (web app) bằng javascript+xml. Ý tưởng web app là tốt nhất, hoàn toàn phù hợp theo phong trào web2.0 hiện nay nhưng cũng là khó thực hiện nhất, để làm ra được 1 chương trình như mình mong muốn thì cần phải biết ít nhất một ngôn ngữ lập trình cho server (PHP, ASP, JSP, hoặc Ruby On Rails, ...) chứ không thể chỉ dựa vào javascript được => bỏ qua, sau này có khả năng sẽ quay lại. Việc sử dụng Flash cũng sẽ gặp phải những khó khăn tương tự, lưu trữ dữ liệu, đa người dùng, ... :-w nên cũng là "nhiệm vụ bất khả thi". Vậy là chỉ còn Java ~o) .

    Quyết định ngôn ngữ xong thì bắt tay vào làm, lao vào hì hục thiết kế dao diện người dùng mới thấy chẳng biết làm gì với nó cả :-s , mình chưa hề có kinh nghiệm gì với kiểu chương trình như thế này. Ok, như vậy là đành phải dành cả buổi chỉ để suy nghĩ về cái chương trình của mình sẽ làm cái gì và làm như thế nào đã rồi hãy quan tâm nó nhìn nó sẽ như thế nào. Sau nửa ngày trằn trọc, băn khoăn suy nghĩ ... i-) thì cuối cùng mình cũng đã có những ý tưởng nhất định, có thể hình dung ra cái chương trình của mình sẽ ra sao. Vậy là bắt đầu viết. Code, code, code, ..., code + code = 2 code code (cốt cộng cốt bằng 2 cốt cốt) and code @-) . Tuy nhiên, mọi chuyện chẳng dễ dàng vậy, có cả loạt thứ mình chưa đụng đến bao giờ như JList, JTabbedPane, ... và một mớ hầm bà lằng khác. Dù vậy, đã có Core Java ở bên cạnh, mình chẳng ngán cái gì cả :D . Vâyh là vẫn tiếp tục cái điệp khúc code, code and code...

    Và cho tới lúc này thì, một chương trình như mong đợi đã hoàn thành, chỉ còn chờ đưa vào sử dụng thôi (kết cục là vì viết cái chương trình giúp cho việc học Anh văn này mà cả tuần nay mình chẳng học chút Anh văn nào cả :D ). Nhưng nghĩ tới nghĩ lui thì trình độ của mình vốn chẳng bao nhiêu, viết một chương trình xong rồi cứ nghĩ nó tốt lắm rồi, hoàn hảo lắm rồi trong khi thực tế thì nó quá tệ, kém hơn chương trình khác xa quả thực là một mối nguy to lớn. Vậy là phải đưa nó lên đây, hi vọng có ai đó hảo tâm thì xem qua rồi nhận xét giúp mình vậy. kính mong mọi người giúp đỡ ^:)^ .

    Chú ý:
    Các bạn download file ở trên về, giải nén rồi chạy file WordReminder.jar để vào chương trình.
    Phải có JRE 5.0 để chạy được Java.


     

    Copyright 2006| Blogger Templates by GeckoandFly modified and converted to Blogger Beta by Blogcrowds.
    No part of the content or the blog may be reproduced without prior written permission.