Sau loạt bài học về java căn bản, chắc hẳn các bạn đã phần nào đó làm quen và hiểu các khái niệm căn bản của ngôn ngữ java.
Để giúp các bạn hiểu rõ hơn và nhớ lại các kiến thức đã tìm hiểu, mình có tổng hợp một số bài tập sau.
Làm quen với ngôn ngữ java
1, Viết chương trình hiện thị đoạn văn bản sau:J a v v a J a a v v a a J J aaaaa V V aaaaa JJ a a V a aSourecode tham khảo 2, Viết chương trình chuyển đổi số từ hệ thập phân sang hệ nhị phân. input: 5 => output = 101 Sourecode tham khảo 3, Viết chương trình chuyển đổi số từ hệ thập phân sang lục phân. input: 15 => output: F Sourecode tham khảo 4, Viết chương trình chuyển đổi số từ hệ thập phân sang bát phân. input: 15 => output: 17 Sourecode tham khảo 5, Viết chương trình chuyển đổi số từ hệ nhị phân sang thập phân. input: 100 => output: 4 Sourecode tham khảo 6, Viết chương trình chuyển đổi số từ hệ nhị phân sang lục phân. input: 1101 => output: D Sourecode tham khảo 7, Viết chương trình chuyển đổi số từ hệ nhị phân sang bát phân. input: 111 => output: 7 Sourecode tham khảo 8, Viết chương trình check thông tin bộ java trên máy tính của bạn. Sourcecode tham khảo 9, Viết chương trình tính tổng các chữ số của một số nguyên. input = 12 => output = 3 Sourcecode tham khảo 10, Viết chương trình đảo ngựợc chuỗi input: shareprogramming => output: gnimmargorperahs Sourcecode tham khảo 11, Viết chương trình đếm các ký tự, số, khoảng trắng và các ký tự khác của một chuỗi. input: Aa kiu, I swd skieo 236587. GH kiu: sieo?? 25.33 output: ky tu: 23 space: 9 so: 10 khac: 6 Sourcecode tham khảo 12, Viết chương trình in mã ascii của một ký tự nhập vào. input: ‘a’ => output: Ascii :97 Sourcecode tham khảo 13, Viết chương trình tìm và in các số từ 1 từ 100 chia hết cho 3 và 5 output: 15 30 45 60 75 90 Sourcecode tham khảo 14, Viết chương trình tìm ước số chung lớn nhất, bội số chung nhỏ nhất của hai số tự nhiên a và b. Sourcecode tham khảo 15, Viết chương trình phân tích một số nguyên thành các thừa số nguyên tố. Ví dụ số 28 được phân tích thành 2 x 2 x 7 Sourcecode tham khảo 16, Viết chương trình liệt kê tất cả các số nguyên tố nhỏ hơn n cho trước. Sourcecode tham khảo 17, Dãy số Fibonacci được định nghĩa như sau: F0 =1, F1 = 1; Fn = Fn-1 + Fn-2 với n>=2. Hãy viết chương trình tìm số Fibonacci thứ n. Sourcecode tham khảo 18. Nhập số liệu cho dãy số thực a0 , a1 ,…, an-1 . Hãy liệt kê các phần tử xuất hiện trong dãy đúng một lần. Sourcecode tham khảo 19, Nhập số liệu cho dãy số thực a0 , a1 ,…, an-1 . In ra màn hình số lần xuất hiện của các phần tử. Sourcecode tham khảo 20, Viết chương trình liệt kê tất cả các số nguyên tố có 5 chữ số sao cho tổng của các chữ số trong mỗi số nguyên tố đều bằng S cho trước. Sourcecode tham khảo 21, Viết chương trình liệt kê các số nguyên có 5-7 chữ số thoả mãn: a) Là số nguyên tố. b) Là số thuận nghịch. c) Tổng các chữ số của số đó là một số thuận nghịch Sourcecode tham khảo 22, Nhập vào số nguyên dương n (n > 0) từ cửa sổ màn hình console. Kiểm tra số nguyên dương là hoàn hảo hay không? Số hoàn hảo là số có giá trị bằng tổng các ước số. Ví dụ: 6 = 1 + 2 + 3 Sourcecode tham khảo 23, Nhập vào n số nguyên, tìm số nguyên âm lớn nhất. Sourcecode tham khảo Bài tập ArrayList Bài tập tìm kiếm Bài tập sắp xếp
Bài tập java regex
Sử dụng java regular expresstions để giải quyết các bài toán sau.
- Bắt đầu bằng ký tự a-z hoặc A-Z – (^[a-zA-Z]+).
- Email không được chứa các ký tự đặt biệt – ([a-zA-Z0-9]*)
- @ xuất hiện 1 lần trong sau nó là các chữ cái, ví dụ @gmail, @yahoo etc – (@{1}[a-zA-Z]+).
- Email kết thúc với .com – mail.com$
3, Kiểm tra định dạng của số điện thoại. Biết rằng số điện thoại có 10 chữ số, bắt đầu bằng số 0. Số tiếp theo không được là số 0.
4, Kiểm tra định dạng của password có định dạng sau
- Chứa ký số từ 0 đến 9 – (?=.*\d)
- Chứa ký tự thường và in hoa – (?=.*[a-z])
- Chứa ký tự in hoa – (?=.*[A-Z])
- Phải chứa các ký tự đặc biệt @#$% – (?=.*[@#$%])
- Độ dài password ít nhất 6 ký tự đến lớn nhất là 20 ký tự {6, 20}
5, Kiểm tra mã màu ở dạng thâp lục phân.Biết rằng mã màu ở dạng thập lục bắt đầu bằng ký tự #. Các các ký số trong khoảng a-f hoặc A-F hoặc là các ký số từ 0-9 với chiều dài 3 hoặc 6 ký tự.
6, Kiểm tra tên của tệp hình ảnh. Biết rằng các hình ảnh có cấu trúc dạng .. Biết extension là một trong các chuỗi: jpg, png, gif, bmp và name không được bắt đầu bằng ký tự khoảng trắng.
7, Kiểm tra tính hợp lệ của địa chỉ IP v4. Như chúng ta biết địa chỉ IP v4 có dạng aaa.bbb.ccc.ddd. Với quy luật sau:
- Nếu bắt đầu với số 0 hoặc 1 thì 2 chữ số còn lại tuỳ ý từ 0 – 9 ([01]?\\d\\d).
- Nếu bắt đầu bằng số 2, thì ký số thứ 2 nằm trong khoảng từ 0 – 4, ký tự cuối cùng tuỳ ý (2[0-4]\\d).
- Nếu bắt đầu bằng 25 thì ký tự còn lại từ 0 – 5 (25[0-5]).
8, Kiểm tra định dạng 12 giờ. Định dạng 12 theo mẫu hh.mm am|pm
9. Kiểm tra định dạng 24h
Bài tập String
B1. Character duplicate
Tìm và in ra các ký tự xuất hiện nhiều hơn một lần trong String cho trước không phân biệt chữ hoa hay chữ thường. Nếu các ký tự trong chuỗi đều là duy nhất thì xuất ra “NO”. Ví dụ chuỗi “Java” thì có ký tự ‘a’ hoặc String “JaVA” cũng có kết quả tương tự.
Gợi ý: Sử dụng HashMap,
B2. String Anagram
Kiểm tra 2 chuỗi có là đảo ngược của nhau hay không. Nếu có xuất ra “OK” ngược lại “KO”. Ví dụ “word” và “drow” là 2 chuỗi đảo ngược nhau.
B3. Character unique
Tìm ký tự chỉ xuất hiện một lần trong chuỗi, nếu có nhiều hơn một thì xuất ra màn hình ký tự đầu tiên. Nếu không có ký tự nào unique xuất ra “NO”.
Gợi ý:
- Sử dụng LinkedHashMap.
- HashMap kết hợp với duyệt lại chuỗi để tìm ra ký tự đầu tiên xuất hiện một lần.
B4. Reverse String
Đảo ngược chuỗi sử dụng vòng lặp và đệ quy.
Gợi ý: Sử dụng StringBuilder hoặc StringBuffer để dễ dàng thao tác hơn, tránh sử dụng String ví nó có tính chất immutable việc thao tác trên chúng sẽ khiến nó tạo thêm một String mới gây hao tổn bộ nhớ.
Bài 5. String not contains digit
Kiểm tra một chuỗi có chứa chữ số hay không, nếu có in ra false ngược lại true.
Ví dụ
“abc”, “” => true
“1abc”, “abc1”, “123”, “a1bc”, null => false
Gợi ý: Sử dụng java regex nếu bạn quen với việc sử dụng chúng. Đây cũng là cách ngắn gọn nhất. Hoặc bạn có thể loop và kiểm tra từng ký tự trong chuỗi.
B6. Count number of vowels and consonants
Đếm số lượng ký tự nguyên âm và phụ âm xuất hiện trong chuỗi. Ví dụ chuỗi “java” có 2 nguyên âm “a” và 2 phụ âm “j” và “v”.
Gợi ý: Dùng switch case để đếm số lượng ký tự nguyên âm. Số phụ âm sẽ là độ dài của chuỗi trừ cho số lượng phụ âm.
B7. Convert string number to int value
Chuyển chuỗi số nguyên sang int value. Ví dụ “5646” thành int = 5646.
Gợi ý: Dùng Integer wrapper class để convert string sang int nhanh chóng.
B8. Replace character
Cho một chuỗi str, chuyển các ký tự được chỉ định sang một ký tự khác cho trước. Ví dụ “shareprogramming.net” chuyển ‘e’ sang ‘*’ kết qủa “shar*programming.n*t”.
Gợi ý: Các bạn có thể dùng String#replace() hoặc StringBuilder để loop và thao tác.
B9. Revert string by word
Đảo ngược các ký tự của chuỗi cách nhau bởi dấu cách mà không dùng thư viện. Ví dụ “I am developer ” => “developer am I”. Các ký tự bên trong chỉ cách nhau đúng một dấu khoảng cách.
Gợi ý: Các bạn cần loại bỏ dấu cách ở đầu và cuối câu, thao tác cắt chuỗi theo dấu cách và dùng StringBuilder hoặc StringBuffer để nối chuỗi.
B10. Check string palindrome
Chuỗi palindrome là chuỗi sau khi đảo ngược và chuỗi ban đầu hoàn toàn giống nhau, ví dụ “aba” là một chuỗi “aba”
Gợi ý: Đảo ngược chuỗi và so sánh với chuỗi ban đầu hoặc loop và so sánh từng cặp chữ một.
B11. Remove character duplicate
Cho một chuỗi str, xoá các ký tự xuất hiện nhiều hơn một lần trong chuỗi và chỉ giữ lại ký tự đầu tiên, vi dụ bananas => bans
Gợi ý: Sử dụng HashSet hoặc ArrayList lưu các ký tự đã xuất hiện trong lúc duyệt. Nếu ký tự được duyệt chưa có tỏng HashSet hoặc ArrayList thì cộng ký tự đó vào chuỗi kết quả và thêm ký tự đó vào HashSet hoặc ArrayList. Lưu ý sử dụng StringBuilder hoặc StringBuffer để thao tác cộng chuỗi.
B12. Find longest palindrome substring
Tìm substring palindrome dài nhất trong một chuỗi cho trước. Biết rằng chuỗi palindrome là chuỗi sau khi đảo ngược và chuỗi ban đầu giống nhau.