Bài giảng Ngôn ngữ lập trình - Nguyễn Thị Hiền

ppt 90 trang huongle 6730
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Ngôn ngữ lập trình - Nguyễn Thị Hiền", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_ngon_ngu_lap_trinh_nguyen_thi_hien.ppt

Nội dung text: Bài giảng Ngôn ngữ lập trình - Nguyễn Thị Hiền

  1. NGÔN NGỮ LẬP TRÌNH I • Giảng viên: TS. Nguyễn Thị Hiền • Bộ môn Công nghệ phần mềm • Email: nguyenthihienqn@gmail.com • Website: hienngong.wordpress.com
  2. JAVAJAVA CƠCƠ BẢNBẢN 1. Các bước phát triển một chương trình Java. Cấu trúc của một chương trình java cơ bản, phương thức main. Chương trình đơn giản: nhập dữ liệu vào từ bàn phím và in ra kết quả màn hình console. 2. Từ khóa, hằng, biến, các kiểu dữ liệu, toán tử 3. Các cấu trúc điều khiển cơ bản trong Java, foreach (Java 5 trở lên) 4. Mảng, xâu kí tự (String, StrongTokenizer) 5. Một số lớp cơ bản: Integer, Long, Double, Math, Date, Calendar, SimpleDateFormat, RegularExpression.
  3. CẤU TRÚC MỘT CHƯƠNG TRÌNH JAVA CƠ BẢN
  4. KIẾN TRÚC CỦA JAVA • Java Platform • Java Virtual Machine (Java VM) • Java Application Programming Interface (Java API) Mã nguồn Java Platform
  5. KIẾN TRÚC CỦA JAVA • Thư viện lớp Java: bộ JDK bao gồm rất nhiều lớp chuẩn đã được xây dựng sẵn. • Lập trình viên thường sử dụng các lớp chuẩn để phát triển ứng dụng. • Các gói chuẩn của Java: • java.lang • java.applet • java.awt • java.io • java.util • java.net • java.awt.event • java.rmi • java.security • java.sql
  6. CÁC BƯỚC PHÁT TRIỂN • Các bước phát triển một chương trình bằng Java: Hello.java java Hello public class Hello { 01001011 public static Thông dịch } Biên dịch javac Hello.java Hello.class (bytecode)
  7. CẤU TRÚC MỘT CHƯƠNG TRÌNH CƠ BẢN 1￿￿￿￿￿￿//￿Tên file￿:￿Hello.java Tên lớp chứa hàm main phải 2￿￿￿￿￿￿/*￿Tác giả : Barak Obama*/ giống tên file 3￿￿￿￿￿￿ 4 public￿class￿Hello 5￿ { 6￿￿￿￿￿￿￿￿￿//￿Phương thức main, điểm bắt đầu của chương trình 7￿￿￿￿￿￿￿￿￿public￿static￿void￿main(￿String￿args[￿]￿) Điểm bắt đầu và kết thúc của lớp 8￿￿￿￿￿￿￿￿￿{ 9￿￿￿￿￿￿￿￿￿￿￿￿System.out.println(￿“Hello￿World"￿); Dấu hiệu chú thích => 10￿￿￿￿ Làm cho chương trình dễ 11￿￿￿￿￿￿￿}￿//￿Kết thúc phương thức main hiểu hơn. Trình biên dịch sẽ 12￿￿￿￿ Khai báo lớp bỏ qua những dòng có dấu 13￿￿￿￿}￿//￿Kết thúc lớp Hello chú thích Mỗi CT phải có ít nhất một khai báo lớp Phương thức main() sẽ được gọi đầu tiên. Mỗi CT thực thi phải có một Hiển thị dãy ký tự ra màn hình phương thức main() Các câu lệnh phải kết thúc bằng dấu chấm phẩy
  8. PHƯƠNG THỨC MAIN • Phương thức main(): là điểm bắt đầu thực thi một ứng dụng. • Mỗi ứng dụng Java phải chứa một phương thức main có dạng như sau: public static void main(String[] args) • Phương thức main chứa ba bổ từ đặc tả sau: - public: chỉ ra rằng phương thức main có thể được gọi bởi bất kỳ đối tượng nào. - static: chỉ ra rằng phương thức main là một phương thức lớp. - void: chỉ ra rằng phương thức main sẽ không trả về bất kỳ một giá trị nào.
  9. CHÚ THÍCH TRONG JAVA • Ngôn ngữ Java hỗ trợ ba kiểu chú thích sau: /* text */ // text / documentation */ công cụ javadoc trong bộ JDK sử dụng chú thích này để chuẩn bị cho việc tự động phát sinh tài liệu. - Dấu mở và đóng ngoặc nhọn “{“ và “}” là bắt đầu và kết thúc một khối lệnh. - Dấu chấm phẩy “;” để kết thúc một dòng lệnh. - Java được tổ chức theo lớp (class). Các lệnh và các hàm (kể cả hàm main) phải thuộc một lớp nào đó, chúng không được đứng bên ngoài của lớp.
  10. NHẬP DỮ LIỆU TỪ BÀN PHÍM • Ví dụ nhập một số nguyên và một số thực import java.io.*; public class TestInput { public static void main(String[] args) throws Exception { BufferedReader inStream = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Nhap mot so nguyen:"); String siNumber = inStream.readLine(); int iNumber = Integer.parseInt(siNumber);
  11. NHẬP DỮ LIỆU TỪ BÀN PHÍM System.out.print("Nhap mot so thuc:"); String sfNumber = inStream.readLine(); float fNumber = Float.parseFloat(sfNumber); System.out.println("So nguyen:“ + iNumber); System.out.println("So thuc:“ + fNumber); } }
  12. 1 // Fig. 2.9: Addition.java 2 // An addition program. 3 4 // Java extension packages 5 import javax.swing.JOptionPane; // import class JOptionPane 6 7 public class Addition { 8 9 // main method begins execution of Java application 10 public static void main( String args[] ) 11 { 12 String firstNumber; // first string entered by user 13 String secondNumber; // second string entered by user 14 int number1; // first number to add 15 int number2; // second number to add 16 int sum; // sum of number1 and number2 17 18 // read in first number from user as a String 19 firstNumber = 20 JOptionPane.showInputDialog( "Enter first integer" ); 21 22 // read in second number from user as a String 23 secondNumber = 24 JOptionPane.showInputDialog( "Enter second integer" ); 25 26 // convert numbers from type String to type int 27 number1 = Integer.parseInt( firstNumber ); 28 number2 = Integer.parseInt( secondNumber ); 29 30 // add the numbers 31 sum = number1 + number2; 32
  13. 33 // display the results 34 JOptionPane.showMessageDialog( 35 null, "The sum is " + sum, "Results", 36 JOptionPane.PLAIN_MESSAGE ); 37 38 System.exit( 0 ); // terminate application 39 40 } // end method main 41 42 } // end class Addition
  14. BIÊN DỊCH VÀ THỰC THI • Biên dịch chương trình • Vào chế độ Console của Windows • Gõ câu lệnh javac Hello.java • Nếu không có thông báo lỗi, file Hello.class sẽ được tạo ra • Thực thi chương trình • Gõ câu lệnh java Hello (không cần .class) • Các ví dụ: Welcome, CommandLine, TestInput, MyInput, InputDialog, InputDialogDemo
  15. HẰNG SỐ, BIẾN, KIỂU DỮ LIỆU, TOÁN TỬ
  16. TỪ KHÓA (keyword) • Từ khóa cho các kiểu dữ liệu cơ bản : byte, short, int, long, float, double, char, boolean. • Từ khóa cho phát biểu lặp: do, while, for, break, continue. • Từ khóa cho phát biểu rẽ nhánh: if, else, switch, case, default, break. • Từ khóa đặc tả đặc tính một method: private, public, protected, final, static, abstract, synchronized. • Hằng (literal): true, false, null. • Từ khóa liên quan đến method: return, void. • Từ khoá liên quan đến package: package, import. • Từ khóa cho việc quản lý lỗi: try, catch, finally, throw, throws. • Từ khóa liên quan đến đối tượng: new, extends, implements, class, instanceof, this, super.
  17. TỪ KHÓA (keyword)
  18. ĐỊNH DANH (identifier) • Định danh là dùng biểu diễn tên của biến, của phương thức, của lớp. • Trong Java, định danh có thể sử dụng ký tự chữ, ký tự số và ký tự dấu. • Ký tự đầu tiên phải là ký tự chữ, dấu gạch dưới (_), hoặc dấu dollar ($). • Có sự phân biệt giữa ký tự chữ hoa và chữ thường. Ví dụ: Hello, _prime, var8, tvLang
  19. BIẾN (variable) • Biến là vùng nhớ dùng để lưu trữ các giá trị của chương trình. • Mỗi biến gắn liền với một kiểu dữ liệu và một định danh duy nhất gọi là tên biến. • Tên biến thông thường là một chuỗi các ký tự (Unicode), ký số. • Tên biến phải bắt đầu bằng một chữ cái, một dấu gạch dưới hay dấu dollar. • Tên biến không được trùng với các từ khóa (xem lại các từ khóa trong java). • Tên biến không có khoảng trắng ở giữa tên. • Trong java, biến có thể được khai báo ở bất kỳ nơi đâu trong chương trình.
  20. BIẾN (variable) • Cách khai báo ; = ; • Gán giá trị cho biến = ; • Biến toàn cục: là biến có thể truy xuất ở khắp nơi trong chương trình, thường được khai báo dùng từ khóa public, và đặt chúng trong một class. • Biến cục bộ: là biến chỉ có thể truy xuất trong khối lệnh nó khai báo
  21. KIỂU DỮ LIỆU (data type) Kiểu dữ liệu: • Kiểu dữ liệu cơ sở (Primitive data type) • Kiểu dữ liệu tham chiếu hay dẫn xuất (reference data type) • Kiểu dữ liệu cơ sở của Java bao gồm các nhóm sau: số nguyên, số thực, ký tự, kiểu luận lý (logic) • Kiểu dữ liệu tham chiếu là các kiểu dữ liệu đối tượng. Ví dụ như: String, Byte, Character, Double, Boolean, Integer, Long, Short, Font, và các lớp do người dùng định nghĩa.
  22. KIỂU DỮ LIỆU CƠ SỞ (primitive type) Kiểu cơ sở Kiểu luận lý Kiểu ký tự Kiểu số kiểu nguyên kiểu boolean char thực byte short int long float double
  23. KIỂU DỮ LIỆU CƠ SỞ • Kiểu số nguyên Kiểu Kích thước Khoảng giá trị byte 8 bits -128 127 short 16 bits -32768 32767 int 32 bits -232 232 – 1 long 64 bits -264 264 – 1 • Kiểu số thực Kiểu Kích thước Khoảng giá trị float 32 bits -3.4e38 3.4e38 double 64 bits -1.7e308 1.7e308
  24. KIỂU DỮ LIỆU CƠ SỞ • Kiểu boolean: Nhận giá trị true hoặc false • Kiểu char: Kiểu ký tự theo chuẩn Unicode Một số hằng ký tự:
  25. KIỂU DỮ LIỆU CƠ SỞ Kiểu số nguyên • Bốn kiểu số nguyên khác nhau là: byte, short, int, long • Kiểu mặc định của các số nguyên là kiểu int • Không có kiểu số nguyên không dấu • Không thể chuyển biến kiểu int và kiểu boolean như trong ngôn ngữ C/C++ VD:VD: intint xx == 0;0; longlong y=100;y=100; intint a=1,b,c;a=1,b,c;
  26. KIỂU DỮ LIỆU CƠ SỞ • Kiểu số nguyên: boolean b = false; if (b == 0) { System.out.println("Xin chao"); } Lúc biên dịch, đoạn chương trình trên sẽ báo lỗi vì ta không được so sánh biến kiểu boolean với biến kiểu int.
  27. KIỂU DỮ LIỆU CƠ SỞ Kiểu dấu chấm động: • Kiểu float có kích thước 4 byte và giá trị mặc định là 0.0f • Kiểu double có kích thước 8 byte và giá trị mặc định là 0.0d • Khai báo và khởi tạo giá trị cho các biến kiểu dấu chấm động: float x = 100.0/7; double y = 1.56E6;
  28. KIỂU DỮ LIỆU CƠ SỞ • Kiểu ký tự • Biểu diễn các ký tự trong bộ mã Unicode • 216 = 65536 ký tự khác nhau : • từ '\u0000' đến '\uFFFF' • Kiểu logic (boolean) • Hai giá trị: true hoặc false • Giá trị mặc định: false • Không thể chuyển thành kiểu nguyên và ngược lại
  29. KIỂU DỮ LIỆU CƠ SỞ • Kiểu mảng • Khai báo: int[] iarray; hoặc int iarray[]; • Cấp phát: iarray = new int[100]; • Khởi tạo: int[] iarray = {1, 2, 3, 5, 6}; char[] carray = {‘a’, ‘b’, ‘c’}; Chú ý: Luôn khởi tạo hoặc cấp phát mảng trước khi sử dụng • Một số khai báo không hợp lệ: int[5] iarray; int iarray[5];
  30. KIỂU DỮ LIỆU CƠ SỞ Kiểu mảng • Truy cập mảng • iarray[3] = 0; • carray[1] = ‘z’; Chú ý: Chỉ số của mảng được tính từ 0 • Lấy số phần tử mảng: iarray.length
  31. KIỂU DỮ LIỆU CƠ SỞ • Khi gặp phải sự không tương thích kiểu dữ liệu chúng ta phải tiến hành chuyển đổi kiểu dữ liệu cho biến hoặc biểu thức
  32. KIỂU DỮ LIỆU CƠ SỞ • Toán tử ép kiểu: = (kiểu_dữ_liệu) ; float fNum = 2.2; int iCount = (int) fNum • Ép kiểu rộng (widening conversion): từ kiểu nhỏ sang kiểu lớn (không mất mát thông tin) • Ép kiểu hẹp (narrow conversion): từ kiểu lớn sang kiểu nhỏ (có khả năng mất mát thông tin)
  33. HẰNG (LITERAL) • Hằng là một giá trị bất biến trong chương trình • Sử dụng từ khóa “final” để khai báo một hằng • Tên hằng được đặt theo qui ước giống như tên biến • Quy ước đặt tên hằng số bằng chữ hoa • • Hằng ký tự: là một ký tự đơn nằm giữa 2 dấu nháy đơn.
  34. HẰNG (LITERAL) • Hằng chuỗi: là tập hợp các ký tự được đặt giữa hai dấu nháy kép “”. Một hằng chuỗi không có ký tự nào là một hằng chuỗi rỗng. Ví dụ: “Hello Wolrd” Lưu ý: Hằng chuỗi không phải là một kiểu dữ liệu cơ sở nhưng vẫn được khai báo và sử dụng trong các chương trình
  35. TOÁN TỬ (OPERATOR) • Toán tử số học
  36. TOÁN TỬ (OPERATOR) • Toán tử quan hệ & logic
  37. TOÁN TỬ (OPERATOR) • Toán tử gán (assignment) Toán tử Ví dụ Giải thích = int c=3, d=5, c=4; += c+=7 c=c+7 -= d-=4 d=d-4 *= e*=5 e=e*5 /= f/=3 f=f/3 %= g%=9 g=g%9
  38. TOÁN TỬ (OPERATOR) • ToánToán tửtử điềuđiều kiệnkiện kiện> ?? 1> :: 2> intint xx == 10;10; intint yy == 20;20; intint ZZ == (x<y)(x<y) ?? 3030 :: 40;40;
  39. ĐỘ ƯU TIÊN CỦA CÁC PHÉP TOÁN • Độ ưu tiên của các phép toán trong ngôn ngữ Java cũng gần giống như ngôn ngữ C/C++. Thứ tự ưu tiên từ trái qua phải và từ trên xuống dưới như bảng sau: 1 . [] () 2 ++ ! ~ 3 * / % 4 + - 5 > >>> 6 = 7 == != 8 & 9 ^ 10 && 11 || 12 ?: 13 =
  40. MỘT VÍ DỤ VỀ PHÉP TOÁN Ví dụ: import java.lang.*; import java.io.*; class VariableDemo { static int x, y; public static void main(String[] args) { x = 10; y = 20; int z = x+y; System.out.println("x = " + x); System.out.println("y = " + y); System.out.println("z = x + y =" + z); System.out.println("So nho hon la so:" + Math.min(x, y)); char c = 80; System.out.println("ky tu c la: " + c); } }
  41. CÁC CẤU TRÚC ĐIỀU KHIỂN TRONG JAVA
  42. CÁC CẤU TRÚC ĐIỀU KHIỂN • Điều khiển rẽ nhánh: • Mệnh đề if-else • Mệnh đề switch-case • Vòng lặp (Loops): • Vòng lặp while • Vòng lặp do-while • Vòng lặp for
  43. MỆNH ĐỀ IF - ELSE • Mệnh đề if/else import java.util.Date; public class TestIf { public static void main( String args[ ] ) { Date today = new Date(); if( today.getDay() == 0 ) System.out.println(“Hom nay la chu nhat\n”); else System.out.println(“Hom nay khong la chu nhat\n" ); } }
  44. MỆNH ĐỀ SWITCH - CASE • Mệnh đề switch/case import javax.swing.JOptionPane; public class TestSwitch { public static void main(String[] args) { char c; String str=JOptionPane.showInputDialog(null,"Nhap vao ky tu?"); c = str.charAt(0); switch(c) { case 'a': case 'e': case 'i': case 'o': case 'u': System.out.println("Ky tu nay la nguyen am"); break; default: System.out.println("Ky tu nay la phu am"); } System.exit(0); // kết thúc chương trình } }
  45. VÒNG LẶP WHILE • Vòng lặp while • while ( ) ; // Tính tổng các số lẻ từ 1 đến 100 int tong = 0, i = 1; while (i<=100) { tong+=i; i+=2; } System.out.println(tong);
  46. VÒNG LẶP DO - WHILE • Vòng lặp do/while do { ; } while ; // Tính tổng các số lẻ từ 1 đến 100 int tong = 0, i=1; do { tong+=i; i+=2; } while (i<=100); System.out.println(tong);
  47. VÒNG LẶP FOR • Vòng lặp for • for( ; ; ) • ; // Chương trình tính tổng các số lẻ từ 1 đến 100 public class TestFor { public static void main(String[] args) { int tong = 0; for(int i=1; i<=100; i+=2) tong+=i; System.out.println(tong); } }
  48. Vòng lặp FOR Cú pháp: for(variable : collection){ Statements; } Ví dụ: int[] a={1,2,3,4,5,6,7,8,9,0}; for(int i : a) { System.out.println(i); }
  49. MẢNG VÀ XÂU KÍ TỰ
  50. MẢNG Mảng là tập hợp nhiều phần tử có cùng tên, cùng kiểu dữ liệu và mỗi phần tử trong mảng được truy xuất thông qua chỉ số của nó trong mảng. Khai báo mảng: []; [] ; Ví dụ: int arrInt[]; int[] arrInt; int[] arrInt1, arrInt2, arrInt3;
  51. MẢNG Khởi tạo mảng: Chúng ta có thể khởi tạo giá trị ban đầu cho các phần tử của mảng khi nó được khai báo. Ví dụ: int arrInt[] = {1, 2, 3}; char arrChar[] = {‘a’, ‘b’, ‘c’}; String arrString[] = {“ABC”, “EFG”, ‘”DFD”};
  52. MẢNG Truy cập mảng: • Chỉ số mảng trong Java bắt đầu tư 0. Vì vậy phần tử đầu tiên có chỉ số là 0, và phần tử thứ n có chỉ số là n-1. Các phần tử của mảng được truy xuất thông qua chỉ số của nó được đặt giữa cặp dấu ngoặc vuông []. • Ví dụ: int arrInt[] = {1, 2, 3}; int x = arrInt[0]; // x sẽ có giá trị là 1. int y = arrInt[1]; // y sẽ có giá trị là 2. int z = arrInt[2]; // z sẽ có giá trị là 3.
  53. MẢNG • Nhập và xuất giá trị các phần tử của một mảng các số nguyên: class ArrayDemo{ public static void main(String args[]){ int [] arrInt = new int[10]; int i; for(i = 0; i < 10; i = i+1) arrInt[i] = i; for(i = 0; i < 10; i = i+1) System.out.println("This is arrInt[" + i +"]: " + arrInt[i]); } }
  54. MẢNG • Tìm phần tử có giá trị nhỏ nhất (Min) và lớn nhất (Max) trong một mảng. class MinMax2 { public static void main(String args[]) { int nums[] = { 99, -10, 100123, 18, -978, 5623, 463, -9, 287, 49 }; int min, max; min = max = nums[0]; for(int i=1; i max) max = nums[i]; } System.out.println("Min and max: " + min + " " + max); } }
  55. MẢNG • Nhập và xuất giá trị của các phần tử trong một mảng hai chiều. class TwoD_Arr { public static void main(String args[]) { int t, i; int [][] table = new int[3][4]; for(t=0; t < 3; ++t) { for(i=0; i < 4; ++i) { table[t][i] = (t*4)+i+1; System.out.print(table[t][i] + “ "); } System.out.println(); } } }
  56. Các ví dụ 1. TestArray: Nhập vào 06 số kiểm tra xem có phải dãy tăng hay ko? 2. TestCopyArry: int[] list1 = {0, 1, 2, 3, 4 ,5};// int x1 int[] list2 = new int[list1.length];// int y1 list2 = list1; // Assign array list1 to array list2// y1=x1 // Bây giờ thay đổi list1 thì list2 có bị thay đổi theo hay ko? //list1[1]=10 3. TestPassArray: public static void swap(int n1, int n2) { int temp = n1; n1 = n2; n2 = temp; } public static void swapFirstTwoInArray(int[] array) { int temp = array[0]; array[0] = array[1]; array[1] = temp; }
  57. Chấm điểm Multiple-Choice Test • Mục tiêu: viết chương trình tính điểm bài thi trắc nghiệm dạng multiple-choice.
  58. Độ dài của mảng nhiều chiều int[][] array = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12} }; array.length // so dong array[0].length // so cot cua dong thu nhat array[1].length // so cot cua dong thu hai array[2].length // so cot cua dong thu ba
  59. Mảng gồ ghề • Mỗi hàng của một mảng 2 chiều là một mảng đơn. Vì vậy, mỗi hàng có thể có độ dài khác nhau. Một mảng như vậy được gọi là mảng gồ ghề (ragged array). Ví dụ: int[][] matrix = { {1, 2, 3, 4, 5}, {2, 3, 4, 5}, {3, 4, 5}, {4, 5}, {5} }; 59
  60. XÂU KÍ TỰ - (String và StringBuffer) • Trong những ngôn ngữ lập trình khác (C chẳng hạn), một chuỗi được xem như một mảng các ký tự. • Trong java thì khác, java cung cấp một lớp String để làm việc với đối tượng dữ liệu xâu cùng các thao tác trên đối tượng dữ liệu này.
  61. XÂU KÍ TỰ- String • String là một đối tượng trong Java. Nhưng những đối tượng này không thể thay đổi được - giá trị của chúng một khi đã được khởi tạo thì không thể thay đổi. • Ví dụ: //msg trỏ tới vùng nhớ 1 có giá trị là String msg = "Hello"; //msg trỏ tới vùng nhớ 2 có giá trị là "Hello world" msg += " world"; như ví dụ trên, String "Hello" không bị thay đổi. Thay vào đó, một String mới được tạo với giá trị là "Hello world" và msg được gán bằng String mới này.
  62. String literal • Trong Java, String literal được lưu liên tiếp trong bộ nhớ. Nếu ta khởi tạo 2 String với cùng một giá trị mà không dùng từ khóa new thì sẽ chỉ có một đối tượng String được tạo. • Ví dụ: String s1="hello“;//s1 trỏ tới vùng nhớ 1 có giá trị là "hello“ String s2="hello“;//s2 cũng trỏ tới vùng nhớ 1 có giá trị là "hello“ Ở đây, s1 và s2 cùng trỏ tới một đối tượng String trong bộ nhớ. Như ta đã nói ở trên, đối tượng String là không thay đổi được. Bởi vậy, nếu ta thay đổi giá trị của s1 thì một đối tượng String mới sẽ được tạo còn đối tượng String ban đầu mà s2 trỏ tới thì sẽ không thay đổi
  63. Tạo xâu kí tự 1. Tạo xâu • String message = "Welcome to Java!“ // tạo tắt - String literal • String message = new String("Welcome to Java!“); • String s = new String(); 2. Sử dụng phương thức intern của lớp String để trả về một string literal , tương tự như string được tạo bởi lệnh tắt: String s = "Welcome to Java!"; String s1 = new String("Welcome to Java!"); String s2 = s1.intern(); System.out.println("s1 == s is " + (s1 == s)); System.out.println("s2 == s is " + (s2 == s)); System.out.println("s1 == s2 is " +(s1 == s2)); Hiển thị: • s1 == s is false s2 == s is true s1 == s2 is false
  64. Bài tập • Viết chương trình đảo ngược xâu họ tên, ví dụ: Hán Văn Tình => Tình Hán Văn
  65. XÂU KÍ TỰ - String • Tạo đối tượng chuỗi class StringDemo { public static void main(String args[]) { // Tao chuoi bang nhieu cach khac nhau String str1 = new String("Chuoi trong java la nhung Objects."); String str2 = "Chung duoc xay dung bang nhieu cach khac nhau."; String str3 = new String(str2); System.out.println(str1); System.out.println(str2); System.out.println(str3); } }
  66. XÂU KÍ TỰ - String • Minh họa một số thao tác cơ bản trên xâu // Chuong trinh minh hoa cac thao tac tren chuoi ky tu class StrOps { public static void main(String args[]) { String str1 = "Java la chon lua so mot cho lap trinh ung dung Web."; String str2 = new String(str1); String str3 = "Java ho tro doi tuong String de xu ly chuoi"; int result, idx; char ch; System.out.println("str1:" + str1); System.out.println("str2:" + str2); System.out.println("str3:" + str3); System.out.println("Chieu dai cua chuoi str1 la:" + str1.length()); // Hien thi chuoi str1, moi lan mot ky tu. System.out.println(); for(int i=0; i < str1.length(); i++) System.out.print(str1.charAt(i));
  67. XÂU KÍ TỰ - String System.out.println(); if(str1.equals(str2)) System.out.println("str1 == str2"); else System.out.println("str1 != str2"); if(str1.equals(str3)) System.out.println("str1 == str3"); else System.out.println("str1 != str3"); result = str1.compareTo(str3); if(result == 0) System.out.println("str1 = str3 "); else if(result str3");
  68. XÂU KÍ TỰ - String // Tao chuoi moi cho str4 String str4 = "Mot Hai Ba Mot"; idx = str4.indexOf("Mot"); System.out.println("str4:" + str4); System.out.println( "Vi tri xuat hien dau tien cua chuoi con 'Mot' trong str4: " + idx); idx = str4.lastIndexOf("Mot"); System.out.println("Vi tri xuat hien sau cung cua chuoi con 'Mot' trong str4:" + idx); } }
  69. XÂU KÍ TỰ - String • Chương trình nhập vào một chuỗi và in ra chuỗi nghịch đảo của chuỗi nhập. import java.lang.String; import java.io.*; public class InverstString { public static void main(String arg[]) { System.out.println("\n CHUONG TRINH IN CHUOI NGUOC "); try { System.out.println("\n Nhap chuoi:"); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); // Class BufferedReader cho phép đọc text từ luồng nhập ký //tự, tạo bộ đệm cho những ký tự để hỗ trợ cho việc đọc //những ký tự, những mảng hay những dòng.
  70. XÂU KÍ TỰ - String // Doc 1 dong tu BufferReadered ket thuc bang dau ket thuc dong. String str = in.readLine(); System.out.println("\n Chuoi vua nhap la:" + str); // Xuat chuoi nghich dao System.out.println("\n Chuoi nghich dao la:"); for (int i=str.length()-1; i>=0; i ) { System.out.print(str.charAt(i)); } } catch (IOException e) { System.out.println(e.toString()); } } }
  71. XÂU KÍ TỰ - String • Lấy chuỗi con của một chuỗi class SubStr { public static void main(String args[]) { String orgstr = "Mot Hai Ba Bon"; // Lay chuoi con dung ham // public String substring(int beginIndex, int // endIndex) String substr = orgstr.substring(4, 7); System.out.println("Chuoi goc: " + orgstr); System.out.println("Chuoi con: " + substr); } }
  72. XÂU KÍ TỰ - String • Mảng các chuỗi class StringArray { public static void main(String args[]) { String str[] = {"Mot", "Hai", "Ba", "Bon" }; System.out.print("Mang goc: "); for(int i=0; i < str.length; i++) System.out.print(str[i] + " "); System.out.println("\n"); // Thay doi chuoi str[0] = "Bon"; str[1] = "Ba"; str[2] = "Hai"; str[3] = "Mot"; System.out.print("Mang thay doi:"); for(int i=0; i < str.length; i++) System.out.print(str[i] + " "); System.out.print("\n"); } }
  73. StringBuffer • StringBuffer là một đối tượng có thể thay đổi được. Điều này có nghĩa là nội dung của String này có thể được thay đổi. • StringBuffer linh hoạt hơn String. Bạn có thể add, insert, hoặc append nội dung mới vào một string buffer. Với một string thì không thể thay đổi nội dung nó được tạo. • Ví dụ: StringBuffer s = new StringBuffer("123"); s.append("456"); //vùng nhớ s trỏ tới sẽ có giá trị 123456
  74. StringTokenizer Xâu có thể được chia thành các xâu con gọi là token bởi các delimiter. Các phương thức khởi tạo: • StringTokenizer(String s,String delim,boolean returnTokens) • StringTokenizer(String s, String delim) • StringTokenizer(String s) Ví dụ: String s = "Java is cool." StringTokenizer tkz = new StringTokenizer(s); StringTokenizer tkz = new StringTokenizer(s,"ac"); StringTokenizer tkz = new StringTokenizer(s,"ac",true);
  75. StringTokenizer Các phương thức: • boolean hasMoreTokens() • String nextToken() • String nextToken(String delim) Ví dụ: String s = "Java is cool." StringTokenizer tkz = new StringTokenizer(s); System.out.println("Tong so token = " + tkz.countTokens()); while (tkz.hasMoreTokens()) System.out.println(tkz.nextToken());
  76. Bài tập • Tìm các từ dài nhất trong xâu kí tự.
  77. MỘT SỐ LỚP CƠ BẢN 1.Integer, Long, Double. 2.Math. 3.Date, Calendar, SimpleDateFormat. 4.RegularExpression.
  78. Integer • Xét 02 khai báo sau: int x =3; //biến x nhận giá trị 3 Integer y = new Integer(30); // đối tượng y int z; z= x + y.intValue(); // chuẩn z =x +y ;// auto-unbox
  79. Integer – Các phương thức
  80. Math • Các hằng thuộc lớp Math: • PI • E • Các phương thức lớp: • Các phương thức lượng giác • Các phương thức số mũ • Các phương thức làm tròn • Các phương thức min, max, abs, và random
  81. Math - Các phương thức lượng giác • sin(double rad) • cos(double rad) • tan(double rad) • acos(double rad) • asin(double rad) • atan(double rad) • toRadians(double deg) • toDegrees(double rad)
  82. Các phương thức số mũ • exp(double a) ea • log(double a) ln(a) • pow(double a, double b) ab • sqrt(double a) căn bậc hai của a
  83. Các phương thức làm tròn •double ceil(double x) x được làm tròn lên giá trị nguyên gần nhất. Giá trị nguyên này được trả về như một giá trị thực. •double floor(double x) x được làm tròn xuống giá trị nguyên gần nhất. Giá trị nguyên này được trả về như một giá trị thực. •double rint(double x) x được làm tròn đến giá trị nguyên gần nhất. •int round(float x) Trả về (int)Math.floor(x+0.5) •long round(double x) Trả về (long)Math.floor(x+0.5)
  84. Các hàm min, max, abs, và random • max(a, b) ; min(a, b) Trả về giá trị lớn nhất / nhỏ nhất của 2 tham số a, b. • abs(a) Trả về giá trị tuyệt đối của a. • random() Trả về một giá trị double ngẫu nhiên trong khoảng [0.0, 1.0).
  85. Date, Calendar, SimpleDateFormat • Calendar – lịch • Ví dụ: Calendar cal = Calendar.getInstance(); switch (cal.DAY_OF_WEEK) { case 1: System.out.println("Hom nay la thu 2 ngay " + cal.get(Calendar.DAY_OF_MONTH) +" thang "+(cal.get (Calendar.MONTH)+1) + " nam " + cal.get(Calendar.YEAR)); . }
  86. Date, Calendar, SimpleDateFormat • Date – Ngày tháng năm giờ phút giây • SimpleDateFormat - định dạng ngày tháng • Ví dụ: Date date = new Date(); SimpleDateFormat sdf; sdf = new SimpleDateFormat("hh:mm:ss"); System.out.println(sdf.format(date)); //In 05:35:38 sdf = new SimpleDateFormat("dd/MM/yyyy"); System.out.println(sdf.format(date)); //In 17/10/2010
  87. RegularExpression • Regular Expression hay còn gọi là biểu thức chính quy dùng để chỉ cách thức chúng ta nhận biết, kiểm tra một chuỗi (biểu thức) có đúng như định dạng chúng ta mong muốn hay không. • Một số pattern đơn giản: ^ phủ định $ kết thúc một pattern [abc] ký tự a, b và c [^abc] bất kỳ ký tự nào trừ a, b, c [a-z0-9] các ký tự a đến z và 0 đến 9 [a-d[m-p]] a through d, or m through p: [a-dm-p] (union) [a-z&&[^bc]] a through z, except for b and c: [ad-z] (subtraction)
  88. RegularExpression • Ví dụ kiểm tra một chuỗi với các ký tự bắt buộc: Pattern pat = Pattern.compile(”Nguyen.*Kien”); Matcher matcher = pat.matcher(”Nguyen Anh Kien”); boolean flag = matcher.matches(); System.out.println(flag); //In ra true • Ví dụ bạn cần kiểm tra điện thoại dạng Phần1-Phần2-Phần3, mỗi phần có ít nhất 1 số và tối đa mỗi phần tương ứng là:3-4-4 số: String phone = “59-1111-1112″; String phoneNumberPattern = “^[0-3]{1,3}-[0-9]{1,4}-[0-9]{1,4}$”; boolean isMatch = Pattern.matches(phoneNumberPattern, phone); System.out.println(isMatch); //In ra true
  89. RegularExpression • Ví dụ về kiểm tra địa chỉ email String email = “nakien2a@yahoo.com”; String emailPattern = “[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-z]{2,7}$”; • boolean isMatch = Pattern.matches(emailPattern, email); System.out.println(isMatch); //In ra true