560 likes | 738 Views
Chương 3 Core Java. Biến ( Variable ). Ví dụ: double salary; int vacationDays; long earthPopulation; boolean done; Form: Variable_type+variable_name+”;”. Qui tắc đặt tên biến. Bắt đầu bằng chữ cái Phải là một chuỗi liên tiếp các chữ, số,kí hiệu Các chữ, số và kí hiệu:
E N D
Biến ( Variable ) • Ví dụ: double salary; int vacationDays; long earthPopulation; boolean done; • Form: Variable_type+variable_name+”;”
Qui tắc đặt tên biến • Bắt đầu bằng chữ cái • Phải là một chuỗi liên tiếp các chữ, số,kí hiệu • Các chữ, số và kí hiệu: - Chữ:‘A’-‘Z’, ‘a’-‘z’,’-‘ ,và các chữ cái Unicode - Số : ’0’-‘9’ • Không sử dụng các kí tự: ‘@’, ‘+’,…
Qui tắc đặt tên biến • Tên biến có thể có độ dài vô hạn • Có thể đặt nhiều biến trên cùng một dòng • Tuy nhiên nên khai báo tường minh: int i, j , k; -> int i; int j; int k;
Khởi tạo giá trị cho biến • Chỉ sử dụng các biến đã được khởi tạo • Thao tác với các biến chưa được khởi tạo sẽ sinh lỗi int vacationDays;System.out.println(vacationDays); // ERROR--variable not initialized • Có thể khởi tạo giá trị ngay sau khi khai báo int vacationDays = 12;
Khởi tạo biến • Có thể khai báo và khởi tạo biến bất cứ đâu trong chương trình double salary =65000.0; System.out.println(salary); int vacationDays = 12; // ok to declare a variable here • Nên khai báo và khởi tạo ở đầu chương trình
Hằng ( Constant) • Khi khai báo và khởi tạo có thêm “final” final double num = 12.5; • Hằng được khai báo một lần • Hằng được sử dụng trong toàn bộ các phương thức của lớp • Khai báo hằng để sử dụng ở các lớp cùng gói Public static final double num = 12.5;
Input and Output • Để đọc dữ liệu vào đơn giản nhất chúng ta sử dụng lớp Scanner • Input : Khai báo Input • Scanner in = new Scanner(System.in); • Chú ý: khai báoimport java.util.*
Reading Input • Chúng ta có câu lệnh vào ra chuẩn như: • System.out.println • Để đọc được input từ consle chúng ta sử dụng lớp Scanner • Để sử dụng các phương thức trong lớp Scanner ta phải tạo ra 1 đối tượng Scanner • Scanner in = new Scanner(System.in);
Chúng ta có các phương thức khác nhau của lớp Scanner • Vd: phương thức nextLine sẽ đọc 1 dòng kí tự khi nhập vào(đọc chuỗi) • System.out.print("What is your name? "); • String name = in.nextLine(); • name sẽ được gán string của dòng nhập vào
Với phương thức nextLine chúng ta bắt cả các ký tự trắng vào • Nếu muốn không bắt khoảng trắng ta dùng phương thức next • String firstName = in.next(); • Tức là firstName chỉ chứa 1 từ
Để đọc vào một số kiểu Integer chúng ta sử dụng phương thức nextInt • System.out.print("How old are you? "); • int age = in.nextInt(); • age nhận giá trị integer
Để sử dụng các phương thức từ lớp Scanner chúng ta phải import gói java.util • Ví dụ 1 chương trình test Input • Ngoài việc sử dụng phương thức Scanner để đọc dữ liệu chúng ta cũng có thể dùng các lớp khác như Reader, BufferReader được mô tả chi tiết trong gói java.io
import java.util.*; • public class inputTest { • public static void main(String[] args) { • Scanner in = new Scanner(System.in); • System.out.print("What your name:"); • String name = in.nextLine(); • System.out.print("How old are you?:"); • int age = in.nextInt(); • System.out.print("Hello,"+ name +".Next year you'll be "+ (age + 1)); • } • }
Chương trình thực hiện sẽ cho ra kết quả • What your name:Minh • How old are you?:22 • Hello,Minh.Next year you'll be 23
Nếu ta sử dụng phương thức hộp thoại thì nó sẽ hiện ra như thế này
Để sử dụng chúng ta phải import gói javax.swing • VD chương trình trên ta sẽ thay bằng cách sử dụng gói này
import javax.swing.*; • public class inputTest { • public static void main(String[] args) { • String name = JOptionPane.showInputDialog("What is your name?"); • String input = JOptionPane.showInputDialog("How old are you?"); • int age = Integer.parseInt(input); • System.out.println("Hello, " + name + ". Next year, you'll be " + (age + 1)); • System.exit(0); • } • }
Các phương thức của gói java.util.Scanner • Scanner(InputStream in) • String nextLine() • Đọc dòng tiếp theo vào • String next() • Đọc từ tiếp theo vào
int nextInt() • double nextDouble() • Đọc và chuyển các ký tự sang kiểu Int và float • boolean hasNext() • Kiểm tra xem từ đó đã có trong dữ liệu vào chưa
boolean hasNextInt() • boolean hasNextDouble() • Hàm này kiểm tra xem chuỗi ký tự nhập vào tiếp theo có phải là kiểu Int và float không
Các phương thức của gói javax.swing.JOptionPane • static String showInputDialog(Object message) • Hiện ra bảng hộp thoại cho chúng ta nhập vào
Chúng ta cần in số x ra thì sẽ sử dụng System.out.print(x) • Vd: • double x = 10000.0 / 3.0; • System.out.print(x); • Sẽ in ra kết quả là 3333.3333333333335
Khi chúng ta sử dụng System.out.printf("%8.2f", x); • Có nghĩa là x sẽ in ra có 8 kí tự, trong đó 2 kí tự sau dấu “.” • Kq: 3333.33
Kiểu dữ liệu Trong Java, kiểu dữ liệu được chia thành 2 loại • Các kiểu dữ liệu nguyên thủy (primitive) • Các kiểu dữ liệu tham chiếu (reference)
Các toán tử Java cung cấp nhiều dạng toán tử sau: • Toán tử số học • Toán tử bit • Toán tử quan hệ
Toán tử số học • Bao gồm phép toán 1 ngôi(thứ tự thực hiện từ phải qua trái):+(cộng),-(trừ), phép đổi dấu • Phép toán 2 ngôi (thứ tự thực hiện từ trái qua phải): *(nhân), /(chia),% (chia lấy số dư) • Phép chia nguyên đòi hỏi số chia khác 0 • Phép chia số thực cho 0.0 là INF(dương vô cùng) và -INF(âm vô cùng)
Toán tử tăng dần và giảm dần • Giống như C, C++, Java cũng sử dụng tăng dần và giảm dần toán tử ( n++ hoặc n--) • VD: int n=12; n++; • Có 2 dạng của các kiểu toán tử này: • Tiền tố:Thực hiện phép cộng trước rồi thực hiện tính toán với giá trị mới vừa cộng đc • Hậu tố:thực hiện tính toán giá trị cũ của biến rồi mới cộng
Toán tử quan hệ và Boolean • Kiểm tra mối quan hệ giữa 2 toán hạng, kết quả trả về giá trị boolean, được sử dụng trong cấu trúc điều khiển. Các toán tử: != ,==, >=, <= ,||, && Sử dụng toán tử tam nguyên ?: Biểu thức: Đk? Biểu thức1: Biểu thức2 double a=10.00; Int b=10; Boolean k= a==b; -result: false vì khác kiểu
Toán tử quan hệ và Boolean public class SinhVien { String ten; int tuoi; SinhVien(String name){ten=name;} public static void main(String[] args) { SinhVien s1= new SinhVien("Ha"); SinhVien s2= new SinhVien("Ha"); SinhVien s3=s2; if(s2==s1) System.out.println("true"); else System.out.println("false"); if(s2==s3) System.out.println("true"); else System.out.println("false"); } }
Toán tử BIT • Cho phép ta thao tác trực tiếp trên từng bit riêng biệt trong các kiểu dliệu nguyên thủy
Hàm và hằng số toán học Lớp Math bao gồm các loại hàm toán học mà ta thường xuyên sử dụng. VD: Hàm lượng giác: Math.sin, Math.cos, Math.tan, Math.atan, Math.atan2 Hàm lũy thừa và log: Math.exp, Math.log Hằng số: Math.PI(3.141592654), Math.E(2.718281828) double x = 4; double y = Math.sqrt(x); System.out.println(y); -> result:2
Ép kiểu Thực hiện cộng 1 biến integer Với 1 biến float --làm ntn? Ép kiểu: chuyển đổi kiểu dữ liệu này sang kiểu khác Chú ý:nếu ép kiểu ngoài phạm vi của kiểu đích, kết quả sẽ là 1 số bị cắt xén có giá trị khác Ex: (byte) 300 là 44 kiểu boolean ko chuyển sang kiểu dliệu khác double x = 9.997; int nx = (int) x; - result: 9 double x = 9.997; int nx = (int) Math.round(x); result:10
Dấu ngoặc đơn và thứ bậc toán tư • Nếu ko có dấu ngoặc đơn, các phép toán được thực hiện theo thứ bậc • Các toán tử ở cùng cấp độ được thực hiện từ trái sang phải hoăc từ phải qua trái như trong bảng sau • Để thay đổi thứ tự thực hiện thì ta phải dùng dấu ngoặc đơn()
Kiểu liệt kê • Bạn có thể tự định nghĩa kiểu liệt kê của bạn tron 1 số trường hợp • VD: size quần áo(S,M,L,X) enum Size{Small, Medium, Large, Extra-Large}; Size s= Size.Small;
STRING • String là 1 chuỗi các kí tự char • String được coi như là 1 lớp với các phương thức đi kèm, khai báo 1 String được coi như là khai báo 1 đối tượng • Ví dụ: ( 2 kiểu khai báo) • String kyo=“KYO-The Best Samurai”; • String kyo=new String(“KYO-The Best Samura”);
CODE FOINTS AND CODE UNIT • Code points: Là vị trí kí tự trong bảng UTD-16 • Ví dụ: • String kyo=“KYO-The Best Samurai”; • int cp = kyo.codePointAt(5); => cp=104 (kí tự ‘h’) • Code Unit: Là nội dung của kí tự • Ví dụ: • String kyo=“KYO-The Best Samurai”; • char ch = kyo.charAt(1) =>ch=‘Y’
SUBSTRINGS • Substring: phương thức để tách 1 xâu thuộc xâu gốc: • OriginalString.Substring(x,y); -> xâu trích ra từ vị trí thứ x->y trong xâu gốc OriginalString • Ví dụ: • String kyo=new String("KYO-The Best Samura"); • String k=kyo.substring(0,4); => Result: KYO-
CHỉNH SửA 1 XÂU • Ví dụ: • Cách sử dụng như trên sẽ thay • String kyo=new String("KYO-The Best Samura"); • String kyo=kyo.substring(0,3) + "khua khua"; • =>Result : “KYOkhua khua”
KIểM TRA XEM 2 XÂU CÓ BằNG NHAU HAY KHÔNG? • Phương thức: • Bloolean String.equals(String) • Chú ý: không dùng kiểu so sánh nội dung xâu “==“ đây chỉ so sánh tham chiếu
INPUT VÀ OUTPUT • Input : Khai báo Input • Scanner in = new Scanner(System.in); • Chú ý: khai báo import java.util.*
ARRAY Định nghĩa: Mảng là 1 cấu trúc bao gồm tập hợp các giá trị cùng kiểu. Ta có thể truy nhập vào từng giá trị riêng lẻ bằng chỉ mục số nguyên. Giống C, mảng được bắt đầu từ vị trí 0
VÒNG LặP “FOR EACH” • Ta có thể dùng phương pháp sau để duyệt từng phần tử của mảng: • for (int element : a) { System.out.println(element); ... } => Không cần biết độ dài của mảng, tiện lợi hơn so với phương pháp duyệt truyền thống
SAO CHÉP MảNG • Sao chép mảng: • int[] luckyNumbers = smallPrimes; • Chú ý: khi thay đổi giá trị của 1 trong 2 mảng thì giá trị của mảng còn lại cũng thay đổi theo. Vì cả 2 đầu tham chiếu đến 1 vùng nhớ lưu giá trị của mảng. • Phương pháp khác để chỉ sao chép giá trị của mảng không thôi là dung phương thức: • System.arraycopy(from, fromIndex, to, toIndex, count);
Sắp xếp mảng và Binary Search • Phương thức sắp xếp: • Arrays.sort(a) //Phương thức này sử dụng thuật toán Quick sort để sắp xếp. • Phương thức binary search: • static int binarySearch(type[] a, type v) (search v trong a)