You are on page 1of 26

Bài 1:Java là gì? Giới thiệu ngôn ngữ Java.

1. Java là gì?
Java là một ngôn ngữ lập lập trình, được phát triển bởi Sun Microsystem vào năm
1995, là ngôn ngữ kế thừa trực tiếp từ C/C++ và là một ngôn ngữ lập trình hướng đối tượng.
Ngôn ngữ này được đặt tên là Java vì Java là tên một hòn đảo ở Indonesia - hòn đảo nổi
tiếng với loại coffee Peet và cũng là loại nước uống phổ biến của các kỹ sư Sun. Ban đầu
Ngôn ngữ này được đặt tên là "Oak" (có nghĩa là "Cây sồi" - 1991), nhưng các luật sư của
Sun xác định rằng tên đó đã được đăng ký nhãn hiệu nên các nhà phát triển đã phải thay thế
bằng một tên mới nên cái tên Java đã ra đời.
2. Ứng dụng của Java
Ngày nay Java được sử dụng với các mục đích sau:
 Phát triển ứng dụng cho các thiết bị điện tử thông minh, các ứng dụng cho doanh nghiệp với
quy mô lớn.
 Tạo các trang web có nội dung động (web applet), nâng cao chức năng của server.
 Phát triển nhiều loại ứng dụng khác nhau: Cơ sở dữ liệu, mạng, Internet, viễn thông, giải trí,..
----------------------------------------------------------------------------------------------------------------------------

Bài 2: Chương trình Java đầu tiên - HelloWorld


1. Viết và phân tích chương trình HelloWorld.
Trong Class HelloWorld, các bạn gõ vào đoạn code sau:
Chương trình HelloWorld

1 package helloworld;
2 public class HelloWorld {
3 public static void main(String[] args) {
4 // In ra dòng chữ "Hello World!"
5 System.out.println("Hello World!");
6 }
7 }

Đầu tiên, ta khai báo Class (lớp) theo cú pháp: public class “tên class”
Tiếp theo, ta sẽ khai báo phương thức main theo cú pháp: public static void main(String[ ]
args). Đây là phương thức sẽ được thực hiện khi thực thi chương trình, phương thức này có
tham số đầu vào (String[ ] args) là một mảng các chuỗi (String).
Trong phương thức main(), câu lệnh cơ bản System.out.println("Hello World!"); dùng để
xuất thông báo "Hello World!" ra màn hình.
Để biên dịch chương trình, ta sẽ nhấp chuột vào tên Project chọn Run As → Java Application
Bài 3: Cú pháp và quy tắc Java cơ bản
1. Cú pháp comment code trong Java.
- Sau dấ u “ // ”: comment một dòng.
- Giữa “ /* ” và “ */ ”: comment nhiề u dòng.
- Giữa “ /** ” và “ */ ”: comment nhiề u dòng đặc biệt dùng để tạo Java code documentation
2. Quy tắc đặt tên trong Java
a. Quy tắc chung.
 Nên được hạn chế dùng từ viết tắt.
 Không được bắt đầu bằng số, ví dụ: 123sinhVien.
 Tên phải được bắt đầu bằng một chữ cái, hoặc các ký tự như $, _, ...
 Không được chứa khoảng trắng, các ký tự toán học. Nếu tên bao gồm nhiều từ thì
phân cách nhau bằng dấu _.
 Trong Java có phân biệt chữ hoa chữ thường.
b. Đặt tên biến.
 Phải tuân theo quy tắc chung ở trên và chữ cái đầu tiên của từ đầu tiên phải viết
thường và chữ cái đầu tiên của các từ tiếp theo phải viết hoa, ví dụ: diemTinh.
 Tên biến nên thể hiện rõ kiểu dữ liệu của biến đó. Ví dụ: biến có kiểu là List thì nên đặt
tên là studentList, biến có kiểu là Set thì nên đặt tên là studentSet…
c. Đặt tên phương thức (Method).
 Giống quy tắc đặt tên biến nhưng từ đầu tiên phải là động từ. Ví dụ: tinhDiem
d. Đặt tên hằng số (Constant).
 Tên hằng số phải tuân theo quy tắc chung ở trên và phải viết hoa (ví dụ: PI).
e. Đặt tên Class và Interface.
 Phải tuân theo quy tắc chung ở trên và chữ cái đầu tiên của mỗi từ phải được viết hoa.
Ví dụ: Class SinhVien.
 Tên Class nên thêm những từ hậu tố phía sau để thể hiện rõ hơn mục đích của Class
đó, như DivZeroException (ta sẽ tìm hiểu về Exception ở bài sau).
 Tên Interface nên có thêm chữ I đằng trước. Ví dụ: IFrame.
 Tên lớp dẫn xuất nên có từ Abstract làm tiền tố, ví dụ: Class AbstractStudent (ta sẽ tìm
hiểu về lớp dẫn xuất ở các bài sau).
f. Đặt tên Project.
 Phải tuân theo quy tắc chung và chữ cái đầu tiên của mỗi từ phải viết hoa.
g. Đặt tên Package.
 Tên Package phải tuân theo quy tắc chung ở trên và phải viết thường.
3. Nhập và xuất ký tự từ bàn phím.
 System.out là chuẩn đầu ra.
 System.in là chuẩn đầu vào.
 System.err dùng để hiển thị thông báo lỗi trong Java.
Ví dụ: Ta có đoạn chương trình sau:
Nhập và xuất ký tự từ bàn phim

1 package nhapxuat;
2 import java.util.Scanner;
3 public class Echo {
4 public static void main(String[] args) {
5 String ten;
6 Scanner scanner = new Scanner(System.in);
7 System.out.println("Mời bạn nhập vào chuỗi: ");
8 ten = scanner.nextLine();
9 // hiển thị chuỗi
10 System.out.println("Chào mừng bạn"+ ten +"đến với Freetuts.net!");
11 }
12 }

a. Nhâ ̣p và xuấ t trong java


 Ta dùng lớp Scanner trong gói java.util. Nó được dùng để nhập và xuất dữ liệu.
 Để dùng lớp Scanner, ta cần import nó vào Project như sau: import java.util.Scanner;
 Để dùng các phương thức của lớp Scanner thì cầ n có đối tượng (phương thức và đối
tượng sẽ đc giới thiệu ở các bài sau), cách tạo đối tượng Scanner trong Java như sau:
Scanner scanner = new Scanner(System.in); (System.in là chuẩn đầu vào trong Java).
 Để trả về kết quả nội dung của chuỗi mà ta đã nhập vào và sau đó sẽ gán kết quả đó
vào biến ten và xuất giá trị của biến ra cửa sổ console bằng câu lệnh:
+ Tên số nguyên = Scanner nextInt(); đố i với biế n int.
+ Tên số phức = Scanner nextFloat(); đố i với biế n float.
+ Tên chuỗi = Scanner.nextLine(); đố i với biế n string.
+ Tên ký tự = scanner.next().charAt(0; đố i với ký tự .
 System.out.println("Chào mừng bạn " + ten + " đến với Freetuts.net!");
b. Làm tròn kế t quả sau dấ u phẩ y ( hàng thâ ̣p phân)
 Ta dùng lớp DecimalFormat trong gói java.text.
 Để dùng lớp DecimalFormat, ta cần import nó vào Project như sau:
Import java.text.DecimalFormat;
 Để dùng các phương thức của lớp DecimalFormat thì cầ n có đối tượng
DecimalFormat decimalFormat = new DecimalFormat("#.##") với phần sau dấu
chấm tương ứng với số chữ số thập phân cần lấy (Nế u ta lấy 2 chữ số thập phân thì
dùng 2 dấu ##).
Lưu ý: nế u muố n xuấ t ra kế t quá có làm tròn hàng thập phân thì phải:
System.out.println(“……………….” + decimalFormat.format(biế n ta cầ n làm tròn));
5. 1 số ký tự ngắt văn bản (escape character) phổ biến trong Java.
Kí tự Mô tả

\t Chèn vào một khoảng trắng trong đoạn văn bản.

\b Xóa lùi 1 ký tự trước \b trong đoạn văn bản. Có bao nhiêu ký tự \b thì sẽ xóa bấy
nhiêu ký tự (chỉ hoạt động khi có chuỗi tồn tại phía trước và phía sau \b).

\n Chèn một dòng mới trong đoạn văn bản.

\r Thay thế các ký tự trước \r bằng số các ký tự phía sau \r

\' Chèn vào dấu nháy đơn trong đoạn văn bản.

\" Chèn vào dấu nháy kép trong đoạn văn bản.

\\ Chèn vào dấu \ trong đoạn văn bản.

----------------------------------------------------------------------------------------------------------------------------

Bài 4: Các kiểu dữ liệu trong Java


1. Kiểu dữ liệu (Data type) trong Java.
Kiểu dữ liệu dùng để xác định kích thước và loại giá trị có thể được lưu trữ trong một định
danh (Định danh ở đây bao gồm tên biến, phương thức, tên lớp, Interface và tên Package).
Các kiểu dữ liệu khác nhau cho phép ta chọn kiểu phù hợp với yêu cầu bài toàn.
Trong Java, các kiểu dữ liệu được chia thành hai loại:

 Các kiểu dữ liệu nguyên thủy (Primitive Data Types)


 Các kiểu dữ liệu tham chiếu (Reference Types)
1. Kiễu dữ liệu nguyên thủy (Primitive Data Types):
Kiểu Mô tả Kích cỡ Tối thiểu Tối đa Lớp bao

byte số nguyên một byte 8 bit -128 127 Byte

short số nguyên ngắn 16 bit -2^15 2^15-1 Short

int số nguyên 32 bit -2^31 2^31-1 Integer

long số nguyên dài 64 bit -2^63 -2^63-1 Long

float kiểu thực có độ chính xác đơn 32 bit IEEE754 IEEE754 Float

double Kiểu thực 64 bit IEEE754 IEEE754 Double

char kiểu kí tự 16 bit Unicode 0 Unicode 2^16-1 Character

boolean kiểu logic true or false - - Boolean

void - - - - Void

 8 bit = 1 bytes
 Kiểu cơ sở gồm:
- Kiểu luận lý: boolean
- Kiểu ký tự: char
- Kiểu số: + Kiểu nguyên: byte, short, int, long.
+ Kiểu thực: float, double.
a. Kiểu số nguyên trong Java
 Kiểu mặc định của các số nguyên là kiểu int và kiểu byte và short rất ít khi được dùng.
 Trong java không có kiểu số nguyên không dấu như trong ngôn ngữ C/C++.
 Lúc biên dịch đoạn chương trình trên trình dịch sẽ báo lỗi không được phép so sánh biến
kiểu boolean với một giá trị kiểu int.
b. Kiểu số thực trong Java
Đối với kiểu dấu chấm động hay kiểu thực, java hỗ trợ hai kiểu dữ liệu là float và double.
 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
Số kiểu dấu chấm động ko có giá trị nhỏ nhất và giá trị lớn nhất. Chúng có thể nhận các giá trị:
 Số âm, Số dương
 Vô cực âm, Vô cực dương
 Nếu có một toán hạng là double thì các toán hạng còn lại sẽ được chuyển thành kiểu double
trước khi thực hiện phép toán.
 Biến kiểu float và double có thể ép chuyển sang kiểu dữ liệu khác trừ kiểu boolean.
c. Kiểu ký tự (char) trong Java
 Kiểu char trong java có thể biểu diễn tất cả 2^16 = 65536 ký tự khác nhau.
 Giá trị mặc định cho một biến kiểu char là null.
 Kiểu dữ liệu kí tự: vd: char myLetter = 'D';
a. Kiểu Boolean trong Java
 Kiểu boolean chỉ nhận 1 trong 2 giá trị: true hoặc false.
 Trong java kiểu boolean không thể chuyển thành kiểu nguyên và ngược lại.
 Giá trị mặc định của kiểu boolean là false.

2. Kiễu Các kiểu dữ liệu tham chiếu (Reference Types):


Trong Java có 3 kiểu dữ liệu tham chiếu

Kiểu dữ liệu Mô tả

Mảng (Array) Tập hợp các dữ liệu cùng kiểu.

Lớp (Class) Là sự cài đặt mô tả về một đối tượng trong bài toán.

Giao diện (Interface) Là 1 thuần trừu tượng được tạo ra cho phép cài đặt đa thừa kế trong Java.

Đặc điểm của các biến kiểu tham chiếu là nó chứa địa chỉ của đối tượng mà nó trỏ đến.
Vùng nhớ của biến tham chiếu được cấp phát ở vùng nhớ stack còn vùng nhớ của đối tượng được
cấp phát ở vùng nhớ heap. Việc truy xất vào vùng nhớ heap chậm hơn truy xất vào vùng nhớ stack tuy
nhiên java có cơ chế cho phép truy cập vào vùng nhớ heap với tốc độ xấp xỉ bằng tốc độ truy cập vào
vùng nhớ stack.
2. Ép kiểu (Type Casting) trong Java.
Ép kiểu là quá trình chuyển đổi kiểu dữ liệu của biến này sang kiểu dữ liệu khác để phục
vụ cho một mục đích nào đó.
Ví dụ: Chúng ta thực hiện phép chia số nguyên 2 cho 4, nếu ta không sử dụng đến ép kiểu
thì kết quả của phép toán này sẽ trả về 0, như vậy thì yêu cầu của bài toán đã không còn
đúng nữa.
Có 2 loại ép kiểu trong Java: Ép kiểu rộng và ép kiểu hẹp.
b. Implicit Casting (Ép kiểu rộng/ Ép kiểu không tường minh).
Chuyển từ kiểu có vùng lưu trữ nhỏ lên kiểu có vùng lưu trữ lớn hoặc về kiểu có cùng kiểu
dữ liệu. Loại này không làm mất mát dữ liệu. Sơ đồ chuyển đổi như sau:
byte → short → int → long → float → double
Lưu ý: nế u muố n tính những cái gì có phân số như diện tích thì phải ép nó về thì sẽ không
dẫ n đế n sai kế t quả.
Ví dụ: Tính thể tích hình cầ u với Thể tích = (4/3) * PI * r3.
Float vol = (float)4/3 * PI * radius * radius * radius;

c. Explicit Casting (Ép kiểu hẹp/ Ép kiểu tường minh).


Chuyển từ kiểu có vùng lưu trữ lớn về kiểu có vùng lưu trữ nhỏ. Loại này có thể làm mất
mát dữ liệu. Sơ đồ chuyển đổi như sau:
double → float → long → int → short → byte
Lưu ý: Khi ép kiểu dữ liệu chúng ta phải thật sự cẩn thận nếu không sẽ làm ảnh hưởng
đến kết quả của toàn bộ bài toán.

d. Lưu ý: cách ép rô ̣ng và ép hep̣ không giố ng nhau

Hình 1: ép rộng


____________________________________________________

Hình 2: ép hẹp


Bài 5: Biến và hằng số trong Java
1. Biến (Variable) trong Java.
Một biến của Java là tên gọi của một vùng nhớ bên trong máy tính dùng để lưu trữ giá trị
mà chương trình của chúng ta có thể tương tác được. Giữa biến và kiểu dữ liệu có một mối
liên hệ mật thiết với nhau, một kiểu dữ liệu phải có một biến để lưu trữ nó.
+ Mỗi biến trong Java bao gồm 3 phần: tên biến, kiểu dữ liệu và giá trị của biến đó.
 Tên biến là sự biểu diễn tượng trưng của vùng nhớ trong đó thông tin được lưu trữ.
 Kiểu dữ liệu dùng để xác định kích thước và loại giá trị có thể được lưu trữ.
 Giá trị là dữ liệu thực tế được lưu trữ trên biến và có thể thay đổi được.
+ Trong Java có 3 loại biến thường gặp là:
 Local variable (biến cục bộ)
 Instance variable (thuộc tính) và Static variable (biến tĩnh). Ta sẽ tìm hiểu kỹ về
thuộc tính và biến tĩnh khi bước sang chương về lập trình hướng đối tượng.
+ Cách khai báo biến trong Java: có 2 cách. Tuy nhiên ta nên sử dụng cách 2.
 Cách 1: [kiểu_dữ_liệu] [tên_biến]; Ví dụ double d1;
 Cách 2: [kiểu_dữ_liệu] [tên_biến] = [giá_trị]; Ví dụ double d1 = 100.04;

2. Local variable (biến cục bộ).


Là biến được khai báo bên trong thân hàm, trog hàm tạo hoặc bên trong các khối lệnh và
chỉ có phạm vi trong nội bộ thân hàm.( học khái niệm hàm, hàm tạo và khối lệnh ở bài sau).
Các biến cục bộ được khởi tạo khi các hàm, hàm tạo hoặc các khối lệnh được tạo ra và
các biến này sẽ bị hủy bỏ một khi các hàm, hàm tạo hoặc các khối lệnh chứa nó kết thúc.
Các phạm vi truy cập không được sử dụng khi khai báo biến cục bộ.
Các biến cục bộ không có giá trị mặc định, vì vậy các bạn cần phải khai báo và khởi tạo
giá trị ban đầu cho biến trước khi sử dụng. Vd: int local=19, float local=5.4f.

3. Hằng số (Constant) trong Java.


Hằng số là những giá trị không bao giờ thay đổi trong suốt quá trình sử dụng, là một giá trị
bất biến trong chương trình.
Ví dụ: Trong đời sống hằng ngày, có những giá trị không bao giờ thay đổi chẳng hạn như:
Một ngày có 24 giờ, một năm có 12 tháng và trong toán học giá trị không thay đổi này được
thể hiện thông quá số PI, số Fibonacci,...
Để khai báo hằng số ta sử dụng từ khóa static final đặt trước tên hằng số:
[Phạm vi truy cập] static final [kiểu dữ liệu] [tên hằng số] = [giá trị];
Ví dụ: public static final int HOUR_OF_DAY = 24;
public static final String CHUOI = "Hello Freetuts!";
Bài 6: Các toán tử thường dùng trong Java
1. Các toán tử cơ bản (Basic Operators) trong Java.
Gồ m: 5 loại.
a. Toán tử gán.

Toán tử Mô tả Ví dụ

= Gán giá trị từ các toán hạng bên phải cho toán a = 1 sẽ gán giá trị 1 cho a.
hạng bên trái.

+= Cộng hoặc nối chuỗi toán hạng bên phải vào a += 1 (tương đương với a = a + 1).
toán hạng bên trái và gán lại kết quả cho toán
hạng bên trái.

-= Trừ toán hạng bên phải khỏi toán hạng trái và a -=1 (tương đương với a = a - 1).
gán lại kết quả cho toán hạng bên trái.

*= Nhân toán hạng bên phải với toán hạng bên trái a *= 2 (tương đương với a = a * 2).
và gán lại kết quả cho toán hạng bên trái.

/= Chia toán hạng bên phải cho toán hạng bên trái a /= 2 (tương đương với a = a / 2).
và gán lại kết quả cho toán hạng bên trái.

%= Chia toán hạng bên phải cho toán hạng bên trái a %= 2 (tương đương với a = a % 2).
và lấy phần dư gán cho toán hạng bên trái.

b. Toán tử số học.

Toán tử Mô tả

+ Toán tử cộng.

- Toán tử trừ.

* Toán tử nhân.

/ Toán tử chia.

% Toán tử chia lấy phần dư.


c. Toán tử 1 ngôi.

Toán tử Mô tả

+ Chỉ định giá trị không âm.

- Chỉ định giá trị âm.

++ Tăng giá trị của toán hạng đó lên 1 đơn vị.

-- Giảm giá trị của toán hạng đó đi 1 đơn vị.

! Phép toán phủ định trên một giá trị luận lý. Nếu một điều kiện đang nhận giá trị là true thì
toán tử này sẽ thay đổi giá trị đó thành false và ngược lại.

- Đối với toán tử ++ và -- thì trong Java có 2 loại là Prefix (tiền tố) và Postfix (hậu tố).
 Đối với Prefix thì toán tử ++, -- sẽ đứng đằng trước toán hạng đó. Ví dụ: ++a hoặc --a.
 Đối với Postfix thì toán tử ++, -- sẽ nằm đằng sau toán hạng đó. Ví dụ: a++ hoặc a--.
- Sự khác nhau giữa Prefix và Postfix là
 Nếu như toán hạng (biến) đó chỉ đứng một mình (ví dụ a++ hoặc a--) thì Postfix hay
Prefix là giống nhau.
 Nế u gặp các toán tử tổ ng hợ p trong bài toán phức tạp như firstVariable++ +
++secondVariable - 8; thì ta làm theo các bước như sau:

Bước thực hiện Kết quả

Bước 1: Xử lý Prefix trước: Ta thấy trong chương trình trên: ++secondVariable = 7+ 1 = 8.


++secondVariable là Prefix nên ta xử lý trước.

Bước 2: Xử lý các phép toán còn lại. 5 + 8 - 8 = 5.

Bước 3: Gán kết quả vừa có cho toán hạng bên trái. result = 5

Bước 4: Xử lý Postfix. firstVariable++ = 5 + 1 = 6


d. Toán tử so sánh.

Toán tử Mô tả

== (So sánh bằng) So sánh giá trị của toán hạng bên trái và toán hạng bên phải có bằng nhau
hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.

!= (So sánh không bằng) So sánh giá trị của toán hạng bên trái và toán hạng bên phải có không
bằng nhau hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.

> (So sánh lớn hơn). So sánh giá trị của toán hạng bên trái có lớn hơn toán hạng bên phải hay
không. Nếu có thì kết quả trả về true, ngược lại trả về false.

>= (So sánh lớn hơn hoặc bằng) So sánh giá trị của toán hạng bên trái có lớn hơn hoặc bằng toán hạng bên
phải hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.

< (So sánh nhỏ hơn) So sánh giá trị của toán hạng bên trái có nhỏ hơn toán hạng bên phải hay
không. Nếu có thì kết quả trả về true, ngược lại trả về false.

<= (So sánh nhỏ hơn hoặc bằng) So sánh giá trị của toán hạng bên trái có nhỏ hơn hoặc bằng toán hạng bên
phải hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.

e. Toán tử luâ ̣n lí điề u kiên:


̣

Toán tử Mô tả

&& Phép toán luận lý VÀ (AND) trên 2 giá trị, Kết quả trả về true khi cả hai đều đúng.

|| Phép toán luận lý HOẶC (OR) trên 2 giá trị. Kết quả trả về false khi cả hai đều sai.

?: Toán tử điều kiện 3 ngôi.

Chương 2: Cấ u trúc điề u khiể n.


Bài 7: Cấu trúc điều khiển if - else trong Java
Để làm quen với các cấu trúc điều khiển, ta cần hiểu về khái niệm khối lệnh: Khối lệnh
(block) là một tập hợp các lệnh nằm trong một cặp dấu {} (bắt đầu bởi { và kết thúc bởi }). Các
khối lệnh có thể lồng nhau, tức là một khối lệnh có thể nằm bên trong một khối lệnh khác.
1. Cấu trúc điều khiển if - else.
Cấu trúc if - else có 4 dạng chính:
a. Cấu trúc if khuyết else. b. Cấu trúc if - else đầy đủ.
Cú pháp Cú pháp

1 if (điều kiên 1) { 1 if (điều kiên 1) {


2 // hành động 1 2 // hành động 1
3 } 3 } else {
4 // Lệnh kế tiếp 4 // hành động 2

Cách hoạt động của cú pháp trên: Khi 5 }


biên dịch chương trình thì trình biên dịch sẽ 6 // Lệnh kế tiếp
kiểm tra điều kiện trong if. Nếu đk đúng
(true) thì hành động nằm bên trong khối
lệnh sẽ được thực hiện, còn nếu điều kiện
sai (false) thì sẽ kết thúc câu lệnh điều khiển
và 1 số câu lệnh kế tiế p sẽ được thi hành.

c. C/ trúc điều khiển if - else if - else. d. Cấ u trúc if - else lồng nhau.
Cấu trúc điều khiển if - else if - else là một Cấu trúc if - else lồng nhau (hay còn gọi là
tập hợp các câu lệnh if, else if bên trong if) là cấu trúc phức tạp nhất của
if và else được dùng để giải quyết những cấu trúc điều khiển if - else. Cú pháp của
yêu cầu phức tạp mà chương trình đề ra. cấu trúc này như sau:
Cú pháp Cú pháp

1 if (điều kiên 1) { if (điều kiện 1) {


2 // hành động 1 ̃ đc kiểm tra
//Nếu đk 1 đúng thì đk 2 se

3 } else if (điều kiện 2) { if (điều kiện 2) {


4 // hành động 2 1 //Nếu đk 2 đúng thì hành động trg if
5 } else if (điều kiện 3) { 2 sẽ được thực hiện

6 // hành động 3 3 } else {


7 } ... else { 4 //Nếu đk 2 sai thì h/động trong else
8 // hành động n 5 sẽ được thực hiện

9 } 6 }
10 // Lệnh kế tiếp 7 } else {
8 //Nếu đk 1 sai thì hđ trong else
9 sẽ được thực hiện

10 }
3. Cấu trúc toán tử điều kiện 3 ngôi.
Toán tử điều kiện 3 ngôi là cấu trúc thay thế của biểu thức điều kiện if - else trong Java.
Cú pháp

1[Biểu thức điều kiện] ? [Giá trị 1] : [Giá trị 2];

Công dụng: Toán tử điều kiện 3 ngôi sẽ kiểm tra giá trị của biểu thức điều kiện, nếu biểu
thức này trả về giá trị đúng thì biểu thức giá trị 1 được tính toán và trở thành giá trị của biểu
thức, nếu biểu thức điều kiện trả về giá trị sai thì biểu thức giá trị 2 được tính toán và trở
thành giá trị của biểu thức.
Ví dụ: Kiể m tra số nhâ ̣p vào là số chẳ n hay lẻ.

String ketQ =(number % 2==0) ? "Số" + number + "là số chẵn" : "Số "+

number +" là số lẻ";


Bài 8: Cấu trúc rẽ nhánh switch - case trong Java.
1. Mô tả cấu trúc rẽ nhánh switch - case.
Cấu trúc rẽ nhánh switch - case cho phép ta chọn một trong nhiều phương án có khả
năng xảy ra, nó có thể dùng dể thay thế cho cấu trúc điều khiển if - else if - else ,

Cú pháp. Ssssssssssssssssssssssssssssssssssssss
sssssssssssssssssssssssssssssssssssssss
1 switch (biểu_thức) { sssssssssssssssssssssssssssssssssssssss
2 case giá_trị_1: sss
Trong đó:
3 Lệnh 1;
 Biểu_thức phải trả về kết quả là một
4 break; số nguyên, chuỗi hoặc một ký tự.
5 case giá_trị_2:  Giá_trị_1, giá_trị_2,..., giá_trị_n là
6 Lệnh 2; các biểu thức hằng, nguyên hoặc ký
tự và chúng phải khác nhau.
7 break;
 Lệnh 1, Lệnh 2, ..., Lệnh n, Lệnh 0 là
8 ... các câu lệnh như
system.out.println(….); gì đó thôi.
9 case giá_trị_n:
 Từ khóa break có thể có hoặc không
10 Lệnh n; có tùy theo từng trường hợp.
11 break;
12 [default: Lệnh 0;]
13 }

Cách thức hoạt động của switch - case như sau:


- Cấ u trúc switch có dùng để thự c hiện nhiề u trường hợ p mà ta muố n. Ví dụ khi ta nhập
̣ thì xuấ t ra lệnh 1. Khi ta nhập giá_tri_2
giá_tri_1 ̣ thì xuấ t ra lệnh 2. Ta có thể xuấ t ra
đúng lệnh mà ta muố n bằ ng cách nhập vào giá tri ̣ của lệnh đó.
- Cấu trúc switch có thể dùng hoặc ko dùng default. Default dùng khi ta nhập biể u_thức
ko nằ m trong các trường hợ p (case) trên thì lệnh trong default sẽ đc thự c hiện.
Lưu ý:
 Lệnh break là để nhảy ra khỏi lệnh switch, nếu không có lệnh này cấu trúc switch sẽ
duyệt cả các trường hợp phía dưới cho đến khi gặp dấu đóng switch (dấu }) (vì chưa
gặp break coi như chưa ra khỏi lệnh switch).
 Khi sử dụng lệnh switch có thể xảy ra nhiều giá trị trả về cho một trường hợp.
Vd: case 1:
case 2:
System.out.println("Số nhỏ");
break;
Chương 3: Vòng lă ̣p
Bài 9: Vòng lặp while trong Java
Cấ u trúc vòng lặp được dùng để thực hiện lặp đi lặp lại nhiều lần 1 nhóm các lệnh nào đó.
1. Cú pháp, cách hoạt động và công dụng vòng lặp while.
a. Công dụng.
Vòng lặp while là cấu trúc điều khiển lặp được dùng để thực hiện một lệnh hay một khối
lệnh với số lần lặp chưa xác định trước. Với cấu trúc này điều kiện lặp được kiểm tra trước
khi thực hiện thân của vòng lặp.
b. Cú pháp.
while (điều_kiện_lặp) { Trong đó:
// Các lệnh  điều_kiện_lặp là biểu thức để xác định
điều kiện lặp. Biểu thức này phải trả
} về giá trị là true hoặc false.
// Lệnh kế tiếp  Các lệnh nằm trong cặp dấu {} là thân
của vòng lặp.

Cách hoạt động.


Đầu tiên, vòng lặp while sẽ tính giá trị của biểu thức điều_kiện_lặp.
+ Nế u biểu thức này có giá trị đúng (true) thì những lệnh nằm trong thân của vòng lặp sẽ
được thực hiện; sau khi thực hiện xong các lệnh này thì biểu thức điều_kiện_lặp được kiểm
tra lại để quyết định có lặp tiếp hay không.
+ Sau đó, những lệnh nằm trong thân vòng lặp sẽ lần lượt được làm đi làm lại nhiều lần khi
mà biểu thức điều_kiện_lặp còn có giá trị đúng.
+ Nếu đến một lúc nào đó biểu thức điều_kiện_lặp có giá trị sai (false) thì các lệnh trong thân
vòng lặp sẽ không được thực hiện và vòng lặp while sẽ kết thúc.
Lưu ý:
 Nếu ngay từ đầu biểu thức điều_kiện_lặp đã có giá trị sai thì vòng lặp while sẽ không
được thực hiện bất cứ lần nào.
 Trong thân vòng lặp phải có lệnh làm thay đổi giá trị của biểu thức điều_kiện_lặp để
đảm bảo sau một số lần thực hiện thì biểu thức điều kiện sẽ có giá trị sai và kết thúc
vòng lặp. Nếu trong trường hợp thân của vòng lặp không có lệnh làm thay đổi giá trị
của biểu thức thì phải sử dụng từ khóa break để thoát khỏi vòng lặp.
Bài 10: Vòng lặp do - while trong Java
1. Cú pháp, cách hoạt động và công dụng vòng lặp do - while.
a. Công dụng.
Vòng lặp do - while là cấu trúc điều khiển lặp được dùng để thực hiện một lệnh hay một
khối lệnh với số lần lặp chưa xác định trước nhưng khác với while, cấu trúc do - while chỉ
kiểm tra điều kiện lặp sau khi thân vòng lặp đã được thực hiện một lần.
b. Cú pháp.
trong đó:
 do {  điều_kiện_lặp là biểu thức để xác định
điều kiện lặp. Biểu thức này phải trả
 // Các lệnh
về giá trị là đúng (true) hoặc sai
 } while (điều_kiện_lặp); (false).
 Các lệnh nằm trong cặp dấu { } là thân
 // Lệnh kế tiếp của vòng lặp.

a. Cách hoạt động.


- Đầu tiên, các lệnh nằm trong thân của vòng lặp do - while sẽ được thực hiện.
- Sau khi thực hiện xong các lệnh này thì biểu thức điều_kiện_lặp sẽ được kiểm tra: nếu
biểu thức này có giá trị đúng (true) thì tiếp tục quay lại thực hiện các lệnh trong thân
vòng lặp. Nếu đến một lúc nào đó biểu thức điều_kiện_lặp có giá trị sai (false) thì các
lệnh trong thân vòng lặp sẽ không được thực hiện và vòng lặp do - while sẽ kết thúc.
Lưu ý:
- Vòng lặp do - while thực hiện các câu lệnh trong thân vòng lặp trước rồi mới kiểm tra
điều kiện nên các câu lệnh nằm trong thân vòng lặp sẽ được thực hiện ít nhất là một
lần.
- Nó hoàn toàn ngược với vòng lặp while: vòng lặp while kiểm tra trước rồi mới thực hiện,
còn do - while thực hiện trước rồi mới kiểm tra
- Trong một số trường hợp thì kết quả của 2 vòng lặp while và do - while giống nhau
nên hãy cố gắng nắm chắc 2 loại vòng lặp này để lựa chọn loại vòng lặp phù hợp với
yêu cầu của chương trình.
Bài 11: Vòng lặp for trong Java
1. Cú pháp, cách hoạt động và công dụng vòng lặp for
a. Công dụng
Vòng lặp for là cấu trúc điều khiển lặp được dùng để thực hiện một lệnh hay một khối lệnh
với số lần lặp được xác định trước. Vì vậy, cấu trúc lặp này rất mạnh và có thể sử dụng rất
linh động trong nhiều tình huống khi viết chương trình.
b. Cú pháp
1 for ([biểu_thức_1]; [biểu_thức_2]; [biểu_thức_3]) {
2 // Các lệnh
3 }
4 // Lệnh kế tiếp

Trong đó: Lưu ý:


 biểu_thức_1 là biểu thức tính ra giá trị - Có thể không có các biể u thức
khởi đầu cho biến của for. nhưng phải có các dấ u “ ; ”.
 biểu_thức_2 là biểu thức tính ra giá trị - Mỗi biểu thức trong cấu trúc for có
điều kiện lặp của for. thể là một hoặc nhiều biểu thức
 biểu_thức_3 là bước nhảy của biến sau đơn. Nếu trong trường hợp một
mỗi lần lặp. biểu thức có nhiều biểu thức đơn thì
các biểu thức đơn được viết cách
 Các lệnh là lệnh thực hiện trong thân của nhau bởi dấu phẩy (,) và các biểu
vòng lặp for. thức đơn đó được thực hiện từ trái
qua phải.

2. Các dạng thường gặp của vòng lặp for


Dạng 1: Vòng lặp for không có biểu_thức_1 và biểu_thức_3
(ý nghĩa giống vòng lặp while).
1 int sum = 0, k = 1;
2 for (; sum < 100; ) {
3 sum += k;
4 k++;
5 }
Dạng 2: Vòng lặp for không có biểu_thức_1.
1 int sum = 0, k = 1;
2 for (; sum < 100; k++) {
3 sum += k;
4 }

Dạng 3: Vòng lặp for vắng mặt cả 3 biểu thức: Khi đó thân của vòng lặp sẽ được
thực hiện liên tục. Lúc đó, trong thân của vòng lặp phải có lệnh để thoát ra ngoài vòng for (chi
tiết về phần này tôi sẽ giới thiệu trong bài sau).

1 for (;;) {
2 // các lệnh
3 // lưu ý: phải có lệnh để thoát ra ngoài vòng lặp
4 }

Dạng 4: Vòng lặp for đầy đủ.


1 int sum = 0, k;
2 for (k = 1; sum < 100; k++) {
3 sum += k;
4 }

Dạng 5: Vòng lặp for đầy đủ và biểu_thức_1 có 2 biểu thức đơn.


1 int sum, k;
2 for (sum = 0, k = 1; sum < 100; k++) {
3 sum += k;
4 }

Dạng 6: Vòng lặp for lồng nhau.


1 for (int row = 1; row <= 2; row++) {
2 for (int col = 1; col <= 2; col++) {
3 System.out.println(row + ", " + col);
4 }
5 }
Bài 12: Từ khóa break và continue trong Java
1. Từ khóa break 2. Từ khóa continue
Khi từ khóa break được dùng thì chương Khi từ khóa continue đượ c dùng thì lần lặp kế tiếp
trình sẽ ngừng ngay mọi vòng lặp có chứa sẽ không được thực hiện.
từ khóa break và chuyển sang câu lệnh
tiếp theo bên ngoài vòng lặp vừa kết thúc. Tương tự như break, từ khóa continue cũng thường
được dùng với một lệnh if ở trong vòng lặp để kiểm
Thông thường, từ khóa break thường tra khi nào thì cần bỏ qua những lệnh sau nó để tiếp
được dùng với một lệnh if bên trong vòng tục thực hiện vòng lặp mới.
lặp để kiểm tra điều kiện dừng của vòng
lặp. Lưu ý: Nếu có nhiều cấu trúc lặp lồng nhau
thì continue chỉ có tác dụng với cấu trúc lặp trong
cùng chứa nó.

3. Điều kiện dừng của các loại vòng lặp


- Một trong những điểm quan trọng khi viết chương trình có sử dụng các cấu trúc lặp do -
while, while và for đó là điều kiện dừng của vòng lặp.
- Điều kiện dừng rấ t quan trọng trong chương trình có dùng cấ u trúc vòng lặp vì nếu không
có nó thì vòng lặp sẽ rơi vào trạng thái lặp vô hạn và chương trình sẽ không bao h dừng lại.
- Để vòng lặp trong chương trình không rơi vào trạng thái lặp vô hạn thì trong quá trình viết
chương trình các bạn cần phải chú ý những điều sau:
 Có ít nhất 1 lần mà các lệnh trong thân vòng lặp làm cho biểu thức điều kiện lặp bị sai.
 Trong thân vòng lặp phải tồn tại từ khóa break gắn liền với biểu thức điều kiện if.

Chương 4: Chuỗi và mảng


Bài 13: Chuỗi (String) trong Java
1. Khai báo chuỗi ký tự:
 Cách 1:
1 ́ Pha
Cu ́p: String tenChuoi = "giá_trị_khởi_tạo";
Trong đó:
- Giá_trị_khởi_tạo của chuỗi có thể có hoặc ko và nếu có thì phải đặt trong cặp dấu " ".
- Nếu một chuỗi có giá_trị_khởi_tạo = " " thì chuỗi đó được gọi là chuỗi rỗng.
 Cách 2: Sử dụng từ khóa new.
́ Pha
1 Cu ́p: String tenChuoi = new String("giá_trị");
Trong đó: Giá_trị là một chuỗi bất kỳ và phải đặt trong cặp dấu " ".
2. Các hàm xử lý chuỗi ký tự
a. Hàm xác định độ dài chuỗi ký tự
́ Pha
1 Cu ́p: int length = tên_chuỗi.length();
Chức năng: Hàm trả về độ dài chuỗi ký tự bằng cách đếm trong chuỗi có bao nhiều ký tự .
b. Hàm nối 2 chuỗi ký tự
Việc nố i chuỗi là sự kết hợp nhiều chuỗi với nhau ta sẽ tạo ra 1 chuỗi mới.. Có 2 cách:
- Cách 1: Nối chuỗi bằng toán tử +. Ví dụ:

2 public class TestStringConcatenation2 {


3 public static void main(String args[]) {
4 String s = 50 + 30 + "-Java-" + 40 + 40;
5 System.out.println(s);
6 } }

Output: 80-Java-4040
Lưu ý: Sau chuỗi, tất cả tính toán với toán tử + sẽ được thực hiện là cộng chuỗi.
- Cách 2: Nối chuỗi bằng phương thức concat()
́ Pha
Cu ́p: String tên_chuỗi_3 = tên_chuỗi_1.concat(tên_chuỗi_2);.

c. Hàm trả về một ký tự trong chuỗi.


Lưu ý: 1 chuỗi là tập hợp các ký tự và ký tự đầu tiên trong chuỗi sẽ có chỉ số (index) là 0.
Ví dụ: 1 chuỗi có chiều dài là 10 thì chỉ số của các ký tự trog chuỗi đó sẽ đc đánh số từ 09.

́ Pha
1 Cu ́p: char character = tên_chuỗi.charAt(int index);
Chức năng: Hàm trả về ký tự character trong chuỗi có chỉ số là index. Ví dụ:

5 public static void main(String[] args) {


6 String chuoi = "Happy new year!";
7 // trả về ký tự có chỉ số là 4 trong chuỗi
8 // ký tự 'H' có chỉ số là 0 nên ký tự có chỉ số 4 là 'y'
9 char character = chuoi.charAt(4);
10 System.out.println(character);
11 } Kết quả sau khi biên dịch chương trình: xuấ t ra “y”
d. Hàm so sánh 2 chuỗi ký tự
́ Pha
1 Cu ́p: int result = tên_chuỗi_1.compareTo(tên_chuỗi_2);
Chức năng: Hàm có tác dụng so sánh hai chuỗi string1, string2 và trả về kết quả:
Nếu result = 0 thì hai chuỗi đó bằng nhau.
Nếu result < 0 thì chuỗi string1 < string2.
Nếu result > 0 thì chuỗi string1 > string2.

e. Hàm trả về vị trí xuất hiện đầu tiên của 1 chuỗi trong chuỗi khác.
́ Pha
1 Cu ́p: int result = tên_chuỗi_1.indexOf(tên_chuỗi_2 or 1 giá trị na
̀ o đó);

Chức năng: Hàm trả về vị trí xuất hiện đầu tiên theo chỉ số index của chuỗi string2 hoặc
giá tri ̣ trong string1. Nếu chuỗi string2 or giá tri ̣ không có trong chuỗi string1 thì kết quả trả
về result = -1.

f. Hàm trả về vị trí xuất hiện cuối cùng của 1 chuỗi trong chuỗi khác.
́ Pha
1 Cu ́p: int result = tên_chuỗi_1.lastIndexOf(tên_chuỗi_2 or 1 giá trị);
Chức năng: Hàm trả về vị trí xuất hiện cuối cùng theo chỉ số index của chuỗi string2 hoặc
giá tri ̣ trong string1. Nếu chuỗi string2 or giá tri ̣ ko có trong chuỗi string1 thì kết quả trả
về result = -1.

g. Hàm thay thế một chuỗi con trong chuỗi ký tự bằng chuỗi khác
́ Pha
Cu ́p:
̀ n_thay.replace(char ký_tư
tên_chuỗi_câ ̣_muốn_thay, char ký_tư ̉n_bi
̣_chuâ ̣_thay_vô);

Chức năng: Hàm sẽ thay thế ký tự “ký_tư ̣_muốn_thay” bă ̀ ng


“ký_tư
̣_chuẩn_bị_thay_vô” trong chuỗi “tên chuỗi ta cầ n thay”. Nếu ký tự cần thay thế
không có trong chuỗi ta muố n thay thì chương trình sẽ trả về chuỗi lại chuỗi đó

h. Hàm loại bỏ các khoảng trắng thừa ở đầu và cuối chuỗi


́ Pha
1 Cu ́p: String1 = tên_chuỗi.trim();
Chức năng: Hàm sẽ loại bỏ các khoảng trắng thừa ở đầu và cuối chuỗi string1. Nếu chuỗi
đó không có khoảng trắng thừa thì chương trình sẽ trả về chuỗi gốc.
i. Hàm tạo một chuỗi con từ vị trí index trong chuỗi cha
́ Pha
Cu ́p:
1 String chuoiCon = chuoiCha.substring(int beginIndex);
2 String chuoiCon = chuoiCha.substring(int beginIndex, int endIndex);

Chức năng: Hàm sẽ tạo một chuỗi con từ vị trí có chỉ số là beginIndex trong chuỗi cha.
Trong cú pháp thứ 2, thì hàm sẽ tạo một chuỗi con bắt đầu từ vị trí có chỉ số là beginIndex và
chỉ số bắt đầu tính từ 0 và chỉ số kết thúc tính từ 1. .

j. Hàm kiể m tra có phải là ký tự thường, hoa hay số không
́ Pha
Cu ́p:
Character.isUpperCase(ký tư ̉m tra có pha
̣): kiê ̉i ký tư
̣ hoa hay k
Character.isLowerCase(ký tư ̉m tra có pha
̣): kiê ̉i ký tư ̀ ng hay k
̣ thươ
Character.isDigit(ký tư ̉m tra có pha
̣): kiê ̣ số hay k
̉i ký tư

3. Ví dụ về chuỗi
a. Ví dụ 1: Viết chương trình nhập từ bàn phím một chuỗi không quá 80 ký tự và
một ký tự bất kỳ. Đếm và in ra màn hình số lần xuất hiện của ký tự đó trong
chuỗi vừa nhập.
Bài giải

6 public static void main(String[] args) {


7 String chuoi;
8 char kyTu;
9 int count = 0;
10 Scanner scanner = new Scanner(System.in);
11
12 // nếu độ dài chuỗi nhập vào còn lớn hơn 80 thì phải nhập lại
13 do {
14 System.out.println("Nhập vào 1 chuỗi bất kỳ: ");
15 chuoi = scanner.nextLine();
16 } while (chuoi.length() > 80);
17
18 System.out.println("Nhập vào ký tự cần đếm số lần xuất hiện: ");
19 kyTu = scanner.next().charAt(0);
20
21 for (int i = 0; i < chuoi.length(); i++) {
22 if (kyTu == chuoi.charAt(i)) {
23 count++;
24 }
25 }
26 System.out.println("Số lần xuất hiện của ký tự " + kyTu +
27 " trong chuỗi " + chuoi + " = " + count);
28 }

Giải thích:
- dùng vòng lặp for, cho biế n i=0 vì ta sẽ xét từ vj trí index=0 trong chuỗi để tìm ký tự cầ n
̀ .
tim
- điề u kiện là số index ta xét phải it́ hơn số index của chuỗi.
- Giá tri ̣ index phải liên tục tăng thì nó mới xét đượ c từng ký tự trong chuỗi.
- Ta dùng hàm if(char kyTu == chuoi.charAt(i)) và count++: để xem thử nế u cái ký tự ta
vừa nhập nó bằ ng với cái hàm chuoi.charAT(i) hay k. nế u nó bằ ng thì tổ ng số lầ n xuấ t hiện
của ký tự là count sẽ tăng lên.
- Ta cho i=0 vì ta sẽ xét từ ký tự đầ u của chuỗi với chỉ số index=0, i ở đây chính là chỉ
số index mà ta bắ t đầ u xét.
- i < chuoi.length(): ta sẽ phải xét giá tri ̣ chỉ số cũng chính là i từ vi ̣ trí đầ u chuỗi là i=0 tới
cuố i chuỗi.
+ phải dùng i<chuoi.length() chỉ số index tính từ 0 còn độ dài của ký tự tính bằ ng 1 nên ta k
đượ c dùng =.
- i++: ta phải tăng chỉ số i lên để tiế p tục xét ký tự tiế p theo.
- Hàm chuoi.charAt(i) nó sẽ trả về ký tự trong chuỗi, trong vòng lặp thứ nhấ t nó sẽ cho
i=0 và hàm sẽ là e==w (lấ y từ ví dụ trên) là sai nên tổ ng count sẽ k tăng, cứ tiế p tục các vòng
lặp tiế p theo cho đế n khi giá tri ̣ của i = tổ ng ký tự của chuỗi -1 thì vòng lặp sẽ kế t thúc và ta
chỉ cầ n xuấ t ra tổ ng số lầ n xuấ t hiện của ký tự cũng chính là biế n count là đượ c.
b. Ví dụ 2: Viết chương trình nhập vào một chuỗi bất kỳ bao gồm cả số, ký tự
thường và ký tự hoa từ bàn phím. Sau đó đếm và in ra số ký tự thường và ký tự
hoa và số có trong chuỗi đó.
Bài giải

14public static void main(String[] args) {


15 String chuoi;
16 int soKyTuInHoa = 0, soKyTuInThuong = 0, soChuSo = 0;
17 Scanner scanner = new Scanner(System.in);
18 do {
19 System.out.println("Nhập vào 1 chuỗi bất kỳ: ");
20 chuoi = scanner.nextLine();
21 } while (chuoi.length() > 80);
22
23 for (int i = 0; i < chuoi.length(); i++) {
24 if (Character.isUpperCase(chuoi.charAt(i))) {
25 soKyTuInHoa++;
26 }
27 if (Character.isLowerCase(chuoi.charAt(i))) {
28 soKyTuInThuong++;
29 }
30 if (Character.isDigit(chuoi.charAt(i))) {
31 soChuSo++;
32 } }
33 System.out.println("Trong chuỗi " + chuoi + " có " + soKyTuInHoa +

34 " ký tự in hoa," + " có " + soKyTuInThuong +

35 " ký tự in thường" + " và có " + soChuSo + " số.");

36 }

You might also like