Lý thuyết môn Cơ sở lập trình nội dung "Tổng hợp và ôn tập kiến thức dữ liệu các lệnh"

Lý thuyết môn Cơ sở lập trình nội dung "Tổng hợp và ôn tập kiến thức dữ liệu các lệnh" của Đại học Nguyễn Tất Thành với những kiến thức và thông tin bổ ích giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học vào thực tiễn cuộc sống. Mời bạn đọc đón xem!

lOMoARcPSD|36667950
Chương này là chương tổng hợp và ôn tập kiến thức về các phép toán và kiểu dữ liệu đã
học ở môn CSLT
TOÁN TỬ TRONG JAVA
1/. Giới thiệu:
Toán tử trong java là một ký hiệu được sử dụng để thực hiện một phép tính/chức năng nào
đó. Java cung cấp các loại toán tử sau:
Toán tử số học
Toán tử bit
Toán tử quan hệ
Toán tử logic
Toán tử điều kiện
Toán tử gán
2/. Toán tử số học:
Các toán hạng của các toán tử số học phải dạng số. Các toán hạng kiểu boolean không sử
dụng được, các toán hạng ký tự cho phép sử dụng loại toán tử này. Một vài kiểu toán tử được
liệt kê trong bảng dưới đây.
Giả sử chúng ta có biến số nguyên a = 10 và b = 20.
Tăng dần a++ sẽ là 11
++ Tăng giá trị của biến lên 1. Ví dụ a++ tương đương với a
a = a + 1
Toán
tử
Mô tả
Ví dụ
+
Cộng
Trả về giá trị là tổng của hai toán hạng
Trừ
Trả về kết quả là hiệu của hai toán hạng.
a + b sẽ là -1
*
Nhân
Trả về giá trị là tích của hai toán hạng.
a * b sẽ là 200
/
Chia
Trả về giá trị là thương của phép chia.
b / a sẽ là 2
%
Phép lấy modulo
Giá trị trả về là phần dư của phép chia
b % a sẽ là 0
lOMoARcPSD|36667950
Giảm dần a sẽ là 9
-- Giảm giá trị của biến 1 đơn vị. Ví dụ a– ơng đương với
a = a 1
Cộng và gán giá trị a += 2 sẽ là 12
Cộng các giá trị của toán hạng bên trái vào toán hạng
bên += phải và gán giá trị trả về vào toán hạng bên trái. Ví
dụ c += a tương đương c = c + a
Trừ và gán giá trị a -= 2 sẽ là 8
Trừ các giá trị của toán hạng bên trái vào toán toán hạng
-= bên phải và gán giá trị trả về vào toán hạng bên trái. Ví dụ c -
= a tương đương với c = c – a
Nhân và gán a *= 2 sẽ là 20
Nhân các giá trị của toán hạng bên trái với toán toán hạng
*=
bên phải và gán giá trị trả về vào toán hạng bên trái. Ví dụ
c *= a tương đương với c = c*a
Chia và gán a /= 2 sẽ là 5
Chia giá trị của toán hạng bên trái cho toán toán hạng bên
/= phải và gán giá trị trả về vào toán hạng bên trái. Ví dụ c
/= a tương đương với c = c/a
Lấy số dư và gán a %= 8 sẽ là 2
Chia giá trị của toán hạng bên trái cho toán toán hạng bên
%=
phải và gán giá trị số dư vào toán hạng bên trái. Ví dụ c
%= a tương đương với c = c%a
3/. Toán tử Bit (sinh viên tham khảo)
Các toán tử dạng bit cho phép chúng ta thao tác trên từng bit riêng biệt trong các kiểu dữ
liệu nguyên thuỷ.
Toán
tử
Mô tả
~
Phủ định NOT
lOMoARcPSD|36667950
4/. Các toán tử quan hệ
Các toán tử quan hệ được sử dụng kiểm tra mối quan hệ giữa hai toán hạng. Kết quả của một
biểu thức dùng các toán tử quan hệ những giá trị Boolean (logic “true” hoặc “false”).
Các toán tử quan hệ được sử dụng trong các cấu trúc điều khiển.
Trả về giá trị phủ định của một bít.
&
Toán tử AND
Trả về giá trị là 1 nếu các toán hạng là 1 và 0 trong các trường hợp khác
|
Toán tử OR
Trả về giá trị là 1 nếu một trong các toán hạng là 1 và 0 trong các trường hợp
khác.
^
Toán tử Exclusive OR
Trả về giá trị là 1 nếu chỉ một trong các toán hạng là 1 và trả về 0 trong các
trường hợp khác.
>>
Dịch phải
Chuyển toàn bộ các bít cuả một số sang phải một vị trí, giữ nguyên dấu của số
âm. Toán hạng bên trái là số bị dịch còn số bên phải chỉ số vị trí mà các bít cần
dịch.
<<
Dịch trái
Chuyển toàn bộ các bít cuả một số sang trái một vị trí, giữ nguyên dấu cuả số âm.
Toán hạng bên trái là số bị dịch còn số bên phải chỉ số vị trí mà các bít cần dịch.
Toán tử
Mô tả
=
=
So sánh bằng
Toán tử này kiểm tra sự tương đương của hai toán hạng
!=
So sánh khác
Toán tử này kiểm tra sự khác nhau của hai toán hạng
>
Lớn hơn
Kiểm tra giá trị của toán hạng bên phải lớn hơn toán hạng bên trái hay không
<
Nhỏ hơn
Kiểm tra giá trị của toán hạng bên phải có nhỏ hơn toán hạng bên trái hay
lOMoARcPSD|36667950
5/. Các toán tử logic
Các toán tử logic làm việc với các toán hạng boolean. Các toán tử quan hệ được sử dụng
trong các cấu trúc điều khiển.
6/. Các toán tử điều kiện
Toán tử điều kiện là một loại toán tử đặc biệt vì nó bao gồm ba thành phần cấu thành biểu
thức điều kiện.
Cú pháp:
<biểu thức đk 1> ? <biểu thức 2> : <biểu thức 3>;
biểu thức đk 1: Biểu thức logic. Trả trả về giá trị True hoặc False
biểu thức 2: Là giá trị trả về nếu biểu thức 1 xác định là True
biểu thức 3: Là giá trị trả về nếu biểu thức 1 xác định là False
không
>=
Lớn hơn hoặc bằng
Kiểm tra giá trị của toán hạng bên phải có lớn hơn hoặc bằng toán hạng bên trái
hay không
<=
Nhỏ hơn hoặc bằng
Kiểm tra giá trị của toán hạng bên phải có nhỏ hơn hoặc bằng toán hạng bên trái
hay không
Toán
tử
Mô tả
&&
Toán tử và (AND)
Trả về một giá trị “Đúng” (True) nếu chỉ khi cả hai toán tử có giá trị “True”
||
Toán tử hoặc (OR)
Trả về giá trị “True” nếu ít nhất một giá trị là True
^
Toán tử XOR
Trả về giá trị True nếu và chỉ nếu chỉ một trong các giá trị là True, các trường
hợp còn lại cho giá trị False (sai)
!
Toán tử phủ định (NOT)
Toán hạng đơn tử NOT. Chuyển giá trị từ True sang False và ngược lại.
lOMoARcPSD|36667950
a khong chia het cho b
7/. Toán tử gán
Toán tử gán (=) dùng đgán một giá trị vào một biến thể gán nhiều giá trị cho nhiều
biến cùng một lúc. dụ:
int var = 20; int
p,q,r,s; p = q = r =
s = var;
Trong ví dụ trên, đoạn lệnh sau gán một giá trị cho biến var và giá trị này lại được gán cho
nhiều biến trên một dòng lệnh đơn.
Dòng lệnh cuối cùng được thực hiện từ phải qua trái. Đầu tiên giá trị ở biến var được gán
cho ‘s’, sau đó giá trị của ‘s’ được gán cho ‘r’ và cứ tiếp như vậy.
Thứ tụ ưu tiên của các toán tử
Thứ tự ưu tiên quyết định trật tự thực hiện các toán tử trên các biểu thức. Bảng dưới đây liệt
kê thứ tự thực hiện các toán tử trong Java (từ trên xuống dưới)
Ví dụ:
public class Test {
public static void main(String[] args) {
int a = 20;
int b = 3;
String s = (a % b == 0) ? "a chia het cho b" : "a khong chia het cho b";
System.out.println(s);
}
}
Kết quả:
lOMoARcPSD|36667950
X = a * (b / d) % e * f;
8/. Thay đổi thứ tự ưu tiên của các toán tử
Để thay đổi thứ tự ưu tiên trên một biểu thức, bạn có thể sử dụng dấu ngoặc đơn ():
Phần được giới hạn trong ngoặc đơn được thực hiện trước.
Nếu dùng nhiều ngoặc đơn lồng nhau thì toán tử nằm trong ngoặc đơn phía trong sẽ
thực thi trước, sau đó đến các vòng phía ngoài.
Trong phạm vi một cặp ngoặc đơn thì quy tắc thứ tự ưu tiên vẫn giữ nguyên tác dụng.
Ví dụ:
Phép toán
Thực hiện
++
,
--
Phải
trái
/, *, %
Trái
phải
+
,
-
Trái
phải
Trái
<
, <=, >,
>=
phải
Trái
=
=, !=
phải
Trái
&&, ||
phải
lOMoARcPSD|36667950
Kết quả:
a + b * c = 70
(a + b) * c = 250
a / b - c = -6
a / (b - c) = -4
CÁC KIỂU DỮ LIỆU TRONG JAVA
1/. Giới thiệu:
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)
Các kiểu dữ liệu đối tượng (Object data)
biểu diễn giá trị từ -128 đến 127. Giá trị mặc định là 0.
public class Test {
public static void main(String[] args) {
int a = 20;
int b = 5;
int c = 10;
System.out.println("a + b * c = " + (a + b * c));
System.out.println("(a + b) * c = " + ((a + b) * c));
System.out.println("a / b - c = " + (a / b - c));
System.out.println("a / (b - c) = " + (a / (b - c)));
}
}
2
/. Kiểu dữ liệu nguyên thủy
Java cung cấp các kiểu dữ liệu cơ bản như sau:
Kiểu dữ
liệu
Mô tả
byte
Dùng để lưu dữ liệu kiểu số nguyên có kích thước một byte (8 bít). Phạm vi
lOMoARcPSD|36667950
char Dùng để lưu dữ liệu kiểu kí tự hoặc số nguyên không âm có kích thước 2 byte
(16 bít). Phạm vi biểu diễn giá trị từ 0 đến u\ffff. Giá trị mặc định là 0.
boolean Dùng để lưu dữ liệu chỉ có hai trạng thái đúng hoặc sai (độ lớn chỉ có 1 bít).
Phạm vi biểu diễn giá trị là {“True”, “False”}. Giá trị mặc định là False.
short Dùng để lưu dữ liệu có kiểu số nguyên, kích cỡ 2 byte (16 bít). Phạm vi biểu
diễn giá trị từ – 32768 đến 32767. Giá trị mặc định là 0.
int Dùng để lưu dữ liệu có kiểu số nguyên, kích cỡ 4 byte (32 bít). Phạm vi biểu
diễn giá trị từ -2,147,483,648 đến 2,147,483,647. Giá trị mặc định là 0.
long Dùng để lưu dữ liệu có kiểu số nguyên có kích thước lên đến 8 byte. Giá trị
mặc định là 0L.
float Dùng để lưu dữ liệu có kiểu số thực, kích cỡ 4 byte (32 bít). Giá trị mặc định là
0.0F.
double Dùng để lưu dữ liệu có kiểu số thực có kích thước lên đến 8 byte. Giá trị mặc
định là 0.00D
Ví dụ:
class B1 {
public static void main(String args[])
{
boolean a = true;
if (a == true)
System.out.println("Good Morning");
}
}
Kết quả:
Good Morning
Ví dụ: Sinh viên giải thích
//CT minh ha kiu d liu byte trong Java
lOMoARcPSD|36667950
126
127
-128
-127
Ví dụ:
class B3 {
public static void main(String args[])
{
//Khai báo kiu character
char a = 'G';
//Khai báo kiu Integer
int i=89;
//Dùng byte và short nếu cha s nh
byte b = 4;
//s báo li nếu cha s t phm vi
//ví d: byte b1 = 7888888955;
class
B2
{
public
static
void
main(String args[])
{
byte
a = 126;
//kiu byte có giá tr là 8 bit
System.out.println(a);
a++;
System.out.println(a);
//B tràn s(overflows) vì ch cha giá tr -128 - 127
a++;
System.out.println(a);
a++;
System.out.println(a);
}
}
Kết quả:
lOMoARcPSD|36667950
short s = 56;
//s báo li nếu cha s t phm vi
//ví d: short s1 = 87878787878;
//giá tr mc đnh cho phân s double
double d = 4.355453532;
//vi kiu float dùng 'f' làm hu t (suffix)
float f = 4.7333434f;
System.out.println("char: " + a);
System.out.println("integer: " + i);
System.out.println("byte: " + b);
System.out.println("short: " + s);
System.out.println("float: " + f);
System.out.println("double: " + d);
}
}
Kết quả:
char: G
integer: 89
byte: 4
short: 56
float: 4.7333436
double: 4.355453532
3/. Kiểu String:
Trong ngôn ngữ lập trình Java, chuỗi (String) được xem 1 dữ liệu dạng đối tượng (tức
các thuộc tính và phương thức - chi tiết về đối tượng chúng ta sẽ được học sâu hơn
trong chương Lập trình hướng đối tượng _ môn Kỹ thuật lập trình).
Chuỗi là 1 y các ký tự và được đặt trong cặp nháy kép.
Khai báo biến chuỗi:
String biến [= "chuỗi"];
Ví dụ:
String chuoi1, chuoi2 = "Việt Nam";
Khai báo đối tượng chuỗi:
String biến = new String("chuỗi");
Ví dụ:
lOMoARcPSD|36667950
String Str = new String("Chào Việt Nam");
Lưu ý:
+có thể nối 2 chuỗi bằng phép + s = "Đại
học " + "Nguyễn Tất Thành";
+Nhập chuỗi bằng phương thức scanner.nextLine();
Các Phương thức:
Tham khảo: https://www.w3schools.com/java/java_ref_string.asp
int compareTo (String hay chữ thường và trả về giá trị: anotherString)
0: 2 chuỗi giống nhau
lOMoARcPSD|36667950
int compareToIgnoreCase (String Khác 0: 2 chuỗi khác nhau
str)
11 int indexOf(int ch) Trả về vị trí đầu tiên của ký tự ch cụ thể.
12 int indexOf(int ch, int fromIndex) Trả về vị trí của ký tự ch tính từ từ vị trí
fromIndex.
13 int indexOf(String substring) Trả về vị trí đầu tiên của chuỗi con substring.
14 int indexOf(String substring, int Trả về chuỗi con đầu tiên chuỗi con tính từ vị
fromIndex) trí fromIndex.
15 String toLowerCase() Trả về chuỗi chữ thường.
16 String toUpperCase() Trả về chuỗi chữ hoa / in.
17 String trim() Xóa khoảng trắng ở đầu và cuối của chuỗi.
18 boolean startsWith(String Kiểm tra tiền tố của chuỗi có khớp với chuỗi prefix)
prefix hay không?. Nếu có offset thì kiểm tra
từ vị trí offset trở đi.
boolean startsWith(String prefix,
int offset) String s = "java string sample";
System.out.println(s.startsWith("ja"));
System.out.println(s.startsWith("ja", 0));
System.out.println(s.startsWith("ja", 7));
System.out.println(s.startsWith("Python"));
Kết quả:
19 boolean endsWith(String suffix) Kiểm tra hậu tố của chuỗi có khớp với chuỗi suffix
hay không?.
String s = "learning java";
System.out.println(s.endsWith("tutorial"));
System.out.println(s.endsWith("java"));
Kết quả:
20 String split(String regex, int limit) Phương thức split() tách chuỗi này theo biểu
lOMoARcPSD|36667950
tt = (char)sc.next().charAt(0); //đ c 1 ký t t chu i nh p vào t i v
trí 0.
String s1 = "Chào ";
String s2 = "Vi t Nam" ;
String s3 = s1.concat(s2); //k t qu là Chào Vi t Namế
String s4 = s2.concat(s1);
String s1 = "Hello";
String s2 = "HELLO";
System.out.println(s1.equals(s2)); //false
System.out.println(s1.equalsIgnoreCase(s2)); //true
String s1 = "Hello";
String s2 = "HELLO";
System.out.println(s1.compareTo(s2)); //32
System.out.println(s1.compareToIgnoreCase(s2)); //0
String s = "Chào Vi t Nam" ;
System.out.println(s.substring(5)); // Viêt Nam
System.out.println(s.substring(0, 5)); //Chào
String s1 = "Gà";
String s2 = "Gà c " ;
String s3 = "Con Gà con m con Gà me, đu i con Gà b " ;
System.out.println(s3.contains(s1)); //true
System.out.println(s3.contains(s2)); //false
char ch = 'G';
String s = "Con Gà con m con Gà me, đu i con Gà b "
; int x1 = s.indexOf(ch); int x2 =
s.indexOf(ch, 10);
System.out.println("V trí xu t hi n c a ký t G tính t v trí th 0 :
thức chính quy(regular expression) và trả về
mảng chuỗi.
Xem thêm:
https://www.geeksforgeeks.org/split-string
-
java-examples
/
Ví dụ:
lOMoARcPSD|36667950
" + x1); //4
System.out.println("V trí xu t hi n c a ký t G tính t v trí th 10:
" + x2); //18
String s1 = "Gà";
String s2 = "Con Gà con m con Gà me, đu i con Gà b "
; int x1 = s2.indexOf(s1); int x2 =
s2.indexOf(s1, 10);
System.out.println("V trí x1 : " + x1);
//4
System.out.println("V trí x2 : " + x2);
//18
String s = new String(" chào Vi t Nam "
); s = s.trim();
String s1 = s.toLowerCase();
String s2 = s.toUpperCase();
System.out.println("Chu i s: " + s); //chào Vi t Nam
System.out.println("Chu i s1: " + s1); //chào vi t nam
System.out.println("Chu i s2: " + s2); //CHÀO VI T NAM
String s = "Pin AAA t t h n Pin ABC"
ơ ; s = s.replace('A', 'E');
System.out.println("Chu i s sau khi thay ký t A: " + s); //Pin EEE t
t h n Pin EBC ơ
s = s.replace("Pin", "Đèn");
System.out.println("Chu i s sau khi thay t Pin : " + s); //Đèn EEE t
t h n Đèn EBC ơ
4/. Kiểu Char
Khái niệm:
Từ khóa char trong Java là một kiểu dữ liệu nguyên thủy. Nó được sử dụng để khai báo các
biến và phương thức kiểu ký tự. Nó có khả năng giữ các ký tự Unicode 16-bit không dấu.
Những điểm cần nhớ:
Phạm vi ký tự nằm trong khoảng từ 0 đến 65,535 .
Giá trị mặc định của nó là '\ u0000'.
Kích thước mặc định của nó là 2 byte.
Nó được sử dụng để lưu trữ các ký tự.
lOMoARcPSD|36667950
Lưu ý:
Khai báo:
char biến [= ‘ký tự’];
Ví dụ:
'a' khác v i
"a"
Ví dụ:
public
class
CharEx2
{
public
static
void
main(String[] args)
{
char
char1=
65
;
char
char2=
97
;
System.out.println(
"char1: "
+
char1);
System.out.println(
"char2: "
+
char2);
}
lOMoARcPSD|36667950
Các phương thức của Char: (tham khảo thêm: https://www.javatpoint.com/post/java-character)
Phương thức Mô tả
isLetter() Kiểm tra ký tự có phải là chữ cái hay không? isDigit() Kiểm tra
ký tự có phải là số hay không?
isWhitespace() Kiểm tra ký tự có phải là khoảng trắng hay không?
isUpperCase() Kiểm tra ký tự có phải là chữ in hay không? isLowerCase()
Kiểm tra ký tự có phải là chữ thường hay không?
toUpperCase() Đổi ký tự thành ký tự in toLowerCase() Đổi
ký tự thành ký tự thường toString() Đổi ký tự thành chuỗi
Ví dụ: nhớ phải dùng thêm lớp Character khi gọi phương thức
public class BTMau3
{ public static void main(String[] args) l p
{
char ch1, ch2, ch3, ch4;
boolean b1, b2, b3, b4, b5;
int x = 56; ch1 = 'a';
ch2 = 'B';
ch3 = ' '; ch4
= 'c';
b1 = Character.isLetter(ch1);
b2 = Character.isLowerCase(ch2);
b3 = Character.isWhitespace(ch3);
b4 = Character.isDigit(x); b5 =
Character.isDigit(ch4);
String str1 = "Bi n ch1 là ký t (letter): "ế + b1;
String str2 = "Bi n ch2 là ch th ng (lower-case): "ế ườ +
b2;
String str3 = "Bi n ch3 là kho ng tr ng (space): "ế +
b3;
String str4 = "Bi n x là ký s (digital): "ế + b4;
String str5 = "ch4 là ký s (digital): " + b5;
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
System.out.println(str5);
//Đ i ký t in, th ng, chu i ườ
}
lOMoARcPSD|36667950
System.out.println("Đ i ch1 thành ký t in: " +
Character.toUpperCase(ch1));
System.out.println("Đ i ch2 thành ký t th ng: " ườ +
Character.toLowerCase(ch2));
System.out.println("Đ i ch4 thành chu i (String): "ổỗ +
Character.toString(ch4));
System.out.println("K t thúc ch ng trình."ế ươ );
}
Ví dụ: nhập vào 1 ký tự, xuất ra ký tự đã nhập và mã Ascii tương ứng với ký tự. Chương trình thực
hiện nhiều lần khi nhấn ký tự khác (Y/y) thì dừng
Kết quả:
Kết quả:
import
java.util.Scanner;
public
class
BTMau4
{
public
static
void
main(String[]
args
)
{
Scanner
sc
=
new
Scanner(System.
in
;
)
char
kt
,
tt
;
do
{
System.
out
.print(
"Nhp 1 ký t : "
)
;
kt
= (
char
)
sc
.next().charAt(0);
System.
out
.println(
"Ký t đã nhp là: "
+
kt
;
)
System.
out
.println(
"Mã Ascii tng ng là: "
+ (
int
)
kt
;
)
System.
out
.print(
"Có tip tc không (Y/N): "
ếụ
;
)
tt
= (
char
)
sc
.next().charAt(0);
}
while
(Character.
toLowerCase
(
tt
)
==
'y'
)
;
System.
out
.println(
"Kt thúc Chng trình."
ế
ươ
)
;
sc
.close();
}
}
lOMoARcPSD|36667950
5/. Biến:
A/. Khái niệm: Trong java, biến là tên của vùng nhớ, dùng chứa giá trị trong tính toán. Có 3
kiểu biến trong java, bao gồm biến local (biến cục bộ), biến instance (biến toàn cục) và biến
static.
B/. Cú pháp khai báo:
[access modifier] datatype varName [ = value] [, varName2] [ = value2]...;
access modifier: ng qui định cách truy xuất biến (học sau)
public: biến là công khai
static: biến là tĩnh
private: biến là riêng default: mặc định
datatype: là kiểu dữ liệu của biến.
Ví dụ:
int a, b, c;
lOMoARcPSD|36667950
long x =50, y = 12000;
C/. Quy tắc đặt tên biến trong java:
Chỉ được bắt đầu bằng một ký tự (chữ), hoặc một dấu gạch dưới (_), hoặc một ký tự
dollar($)
Tên biến không được chứa khoảng trắng
Không được trùng với các từ khóa
phân biệt chữ hoa và chữ thường
D/. Quy tắc Camel:
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ụ: diemTrungBinh, iPhone, eBay, fedEx, chieuDai, tyGia.
Ngoài ra, trong một số trường hợp, tên biến cần phải 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, biến có kiểu là Map thì nên đặt tên là studentMap, biến có
kiểu là Array thì nên đặt tên là studentArray,... Vd: double dienTich, chieuDai,
chieuRong; E/. Biến local trong java:
Biến local được khai báo trong các phương thức, hàm constructor hoặc trong các
block.
Biến local được tạo bên trong các phương thức, constructor, block và sẽ bị phá hủy
khi kết thúc các phương thức, constructor và block.
Không sử dụng "access modifier" khi khai báo biến local.
Các biến local được lưu trên vùng nhớ stack của bộ nhớ.
Bạn cần khởi tạo giá trị mặc định cho biến local trước khi có thể sử dụng.
F/. Biến instance: biến instance (biến toàn cục) trong java (tham khảo thêm)
Biến instance được khai báo trong một lớp (class), bên ngoài các phương thức,
constructor và các block.
Biến instance được lưu trong bộ nhớ Heap.
Biến instance được tạo khi một đối tượng được tạo bằng việc sử dụng từ khóa “new”
và sẽ bị phá hủy khi đối tượng bị phá hủy.
Biến instance có thể được sử dụng bởi các phương thức, constructor, block, ... Nhưng
nó phải được sử dụng thông qua một đối tượng cụ thể.
Ta được phép sử dụng "access modifier" khi khai báo biến instance, mặc định là
"default".
Biến instance có giá trị mặc định phụ thuộc vào kiểu dữ liệu của nó. Ví dụ nếu là
kiểu int, short, byte thì giá trị mặc định là 0, kiểu double thì là 0.0, ... Vì vậy, ta sẽ
không cần khởi tạo giá trị cho biến instance trước khi sử dụng.
Bên trong class mà bạn khai báo biến instance, ta có thể gọi nó trực tiếp bằng tên khi
sử dụng ở khắp nơi bên trong class đó.
Ví dụ:
lOMoARcPSD|36667950
G/. Biến static: Biến static trong java có qui định như sau: (tham khảo thêm)
Biến static được khai báo trong một class với từ khóa "static", phía bên ngoài các
phương thức, constructor và block.
Sẽ chỉ có duy nhất một bản sao của các biến static được tạo ra, dù bạn tạo bao nhiêu
đối tượng từ lớp tương ứng.
Biến static được lưu trữ trong bộ nhớ static riêng.
Biến static được tạo khi chương trình bắt đầu chạy và chỉ bị phá hủy khi chương trình
dừng.
Giá trị mặc định của biến static phụ thuộc vào kiểu dữ liệu bạn khai báo tương tự
biến instance.
Biến static được truy cập thông qua tên của class chứa nó, với cú pháp:
TenClass.tenBien.
Trong class, các phương thức sử dụng biến static bằng cách gọi tên của nó khi
phương thức đó cũng được khai báo với từ khóa "static".
package
Goiche;
public
class
Sinhvien
{
// biến instance là ten có kiểu String, có giá trị mặc định là null
public
String
ten
;
// biến instance là tuoi có kiểu Integer, có giá trị mặc định là 0
private
int
tuoi
;
// sử dụng biến ten trong một constructor
public
Sinhvien(String
ten
)
{
this
.
ten
=
ten
;
}
// sử dụng biến tuoi trong phương thức setTuoi
public
void
setTuoi(
int
tuoi
{
)
this
.
tuoi
=
tuoi
;
}
public
void
showStudent() {
System.
out
.println(
"Tên : "
+
ten
)
;
System.
out
.println(
"Tuổi : "
+
tuoi
)
;
}
public
static
void
main(String
args
[]) {
Sinhvien
sv
=
new
Sinhvien(
"Nguyen Van A"
)
;
sv
.setTuoi(21);
sv
.showStudent();
}
}
lOMoARcPSD|36667950
Ví dụ:
package Goiche; public
class Sinhvien2 {
// biến static là ten
public static String ten = "Nguyen Van A";
// biến static là tuoi public static int tuoi =
21; public String diachi = "12 Trần Hưng
Đạo"; public static void main(String args[]) {
// Sử dụng biến static bằng cách gọi trực tiếp
System.out.println("Ten : " + ten);
// Sử dụng biến static bằng cách gọi thông qua tên class
System.out.println("Ten : " + Sinhvien2.tuoi);
System.out.println("Địa chỉ : " + diachi);
}
}
Ví dụ: Phân biệt các biến:
public class Variables
{ public String x1="Nguy n Ái Qu c" ; //bi n toàn c
cế
public static String x2; //bi n tĩnhế public
static void main(String[] args)
{
String a, x1; //bi n c c bế
a = "H Chí Minh" ; x1 =
"Nguy n T t Thành" ;
Variables doituong1 = new Variables();
Variables.x2 ="Nguy n Sinh Cung";
System.out.println("1/. Bi n c c b : "ế + a);
System.out.println("2/. Bi n c c bế : " + x1);
System.out.println("3/. Bi n toàn c c: "ế +
doituong1.x1);
System.out.println("4/. Bi n tĩnh : "ế + Variables.x2);
Variables doituong2 = new Variables();
doituong2.x1 = "Tôn Đ c Th ng" ắắ ;
System.out.println("5/. Bi n toàn c c: "ế +
doituong2.x1); }
}
Kết quả:
1/. Biếến c c b : Hồồ Chí Minh
2/. Biếến c c b : Nguyến Tấết Thành
3/. Biếến toàn c c: Nguyếễn Ái Quồếc
4/. Biếến tĩnh : Nguyếễn Sinh Cung
lOMoARcPSD|36667950
5/. Biếến tòan c c: Tồn Đ c Thắnế g
CẤU TRÚC ĐIỀU KHIỂN
1/. Lệnh If: là cấu trúc chuyển hướng thực hiện trong chương trình theo điều kiện
A/. If đơn: thực hiện khi điều kiện đúng
Cú pháp: Nếu điều kiện đúng thì thực hiện khối lệnh
Giải thích:
Chương trình kiểm tra điều kin (condition).
Nếu điều kiện đúng (true), các đoạn (code) trong khi lnh ca if s đưc thc thi.
Sau đó nó tiếp tc thực thi các mã phía dưới ca khi lnh if.
Nếu điều kiện sai (false), chương trình sẽ b qua các đoạn trong khi lnh ca if,
thực thi các đoạn mã phía dưới khi lnh if.
B/. If Else: Thực hiện cho trường hợp điều kiện đúng hoặc sai.
Cú pháp: Nếu điều kiện đúng thì thực hiện khối lệnh 1, còn không (điều kiện sai) thì thực hiện khối
lệnh 2.
if
(
condition)
{
khi lnh
}
lOMoARcPSD|36667950
Giải thích: sinh viên nghe giảng và tự giải thích
C/. If Else If: là dạng các lệnh If lồng nhau:
Cú pháp:
if
condition)
(
{
khi lnh 1
}
else
{
khi lnh 2
}
if
(
condition 1)
{
khi lnh 1
lOMoARcPSD|36667950
}
else if (condition 2)
{
khi lnh 2
}
else if (condition N)
{
khi lnh N
}
else
{
Khi lnh else
}
lOMoARcPSD|36667950
Ví dụ 1:
Ví dụ 2:
Giải thích:
sinh viên nghe giảng và tự giải thích
public
class
vidu1 {
public
static
void
main(String[]
args
)
{
int
x
= 100;
int
y
= 80;
if
(
x
>
y
)
{
System.
out
.println(
"x ln hn y"
)
;
}
}
}
public
class
vidu2 {
public
static
void
main(String[]
args
)
{
int
x
= 500;
int
y
= 1001;
if
(
x
>
y
)
lOMoARcPSD|36667950
Ví dụ 3:
Bài tập mẫu 1: Viết chương trình nhập vào một điểm, tính xếp loại theo bảng
sau:
Điểm >=9: xếp loại giỏi
Điểm >=7 và <9: xếp loại khá
Điểm >=5 và <7: xếp loại trung bình
Còn lại xếp loại kém
Input: float diem
Output: chuỗi thông báo
public
class
vidu3 {
public
static
void
main(String[]
args
)
{
int
time
= 22;
if
(
time
<= 10)
{
System.
out
.println(
"Good morning."
)
;
}
else
if
(
time
<= 20)
{
System.
out
.println(
"Good day."
;
)
}
else
{
System.
out
.println(
"Good evening."
)
;
}
}
}
import
java.util.Scanner;
public
class
btm1 {
public
static
void
main(String[]
args
)
{
Scanner
s
=
new
Scanner(System.
in
;
)
float
diem
;
System.
out
.println(
"Nhp đim s : "
ểố
;
)
diem
=
s
.nextFloat();
System.
out
.println(
"x ln hn y"
)
;
else
System.
out
.println(
"y ln hn x"
)
;
}
}
lOMoARcPSD|36667950
Bài tập mẫu 2: Viết chương trình nhập vào số Km đã đi, tính tiền Taxi phải tra theo bảng sau:
Số Km <=3: giá 12000 đ / 1 Km
Số Km <=30: Km thứ 4 trở đi tính giá 9000 đ/ 1Km
Số Km <=70: Km thứ 31 trở đi tính giá 6000 đ / 1 Km
Số Km >70: tính giá 5800 đ / 1 Km cho số Km đã đi
Input: float soKm
Output: float soTien
Bài tập 15’: Viết chương trình nhập vào 1 năm, cho biết năm đó có nhuần hay không?
Biết năm nhuần là năm chia chẵn cho 4, đặc biệt năm đầu thế kỷ chỉ nhuần khi chia chẵn cho 400.
2/. Lệnh switch case: switch case được sử dụng để chuyển hướng thực hiện theo giá trị của biểu
thức.
Cú pháp:
if
(
diem
>= 9.0)
System.
out
.println(
"Loi gii"
;
)
else
if
(
diem
< 9.0 &&
diem
>= 7.0)
System.
out
.println(
"Loi khá"
;
)
else
if
(
diem
< 7.0 &&
diem
>= 5.0)
System.
out
.println(
"Loi trung bình"
)
;
else
System.
out
.println(
"Loi kém"
)
;
}
}
import
java.util.Scanner;
public
class
btm2 {
public
static
void
main(String[]
args
)
{
Scanner
s
=
new
Scanner(System.
in
)
;
float
soKm
,
soTien
=0
;
System.
out
.println(
"Nhp s Km đã đi : "
ậố
;
)
soKm
=
s
.nextFloat();
if
(
soKm
<= 3.0)
soTien
= 12000 *
soKm
;
else
if
(
soKm
> 3.0 &&
soKm
<= 30.0)
soTien
= (12000 * 3) + ((
soKm
-3)*9000)
;
else
if
(
soKm
> 30.0 &&
soKm
<= 70.0)
soTien
= (12000*3) + (9000*27) + ((
soKm
-30)*6000)
;
else
soTien
=
soKm
* 5800;
System.
out
.println(
"S tin phi tr : "
ốề
+
soTien
)
;
}
}
lOMoARcPSD|36667950
switch (biu thc)
{ case giá
tri 1: Khi
lnh 1;
break; case giá
tri 2:
Khi lnh 2;
break; ...
case giá tri n:
Khi lnh n;
break;
default:
Khi lệnh này được thc hin nếu tt c
các giá tr trên không tha mãn;
}
lOMoARcPSD|36667950
Giải thích: Sinh viên nghe giảng và ghi nhận
Ví dụ 4:
lOMoARcPSD|36667950
Bài tập mẫu 3: Viết chương trình nhập vào 1 năm dương lịch (ví dụ 1998, 2020) cho biết năm
đó là năm con giáp gì?
Biết năm 1968: 1968 % 12 = 0 – Năm Thân
1969 % 12 = 1 Năm Dậu
1970 % 12 = 2 Năm Tuất
import
java.util.Scanner;
public
class
VD4
{
public
static
void
main(String[]
args
)
{
Scanner
s
=
new
Scanner(System.
in
;
)
System.
out
.print(
"Nhp mt ngày (1-7) : "
ậộ
)
;
int
day
=
s
.nextInt();
switch
(
day
)
{
case
1:
System.
out
.println(
"Monday"
)
;
break
;
case
2:
System.
out
.println(
"Tuesday"
)
;
break
;
case
3:
System.
out
.println(
"Wednesday"
)
;
break
;
case
4:
System.
out
.println(
"Thursday"
)
;
break
;
case
5:
System.
out
.println(
"Friday"
)
;
break
;
case
6:
System.
out
.println(
"Saturday"
;
)
break
;
case
7:
System.
out
.println(
"Sunday"
)
;
break
;
default
:
System.
out
.println(
"Không có ngày này !."
)
;
}
System.
out
.println(
"Bye."
)
;
}
}
lOMoARcPSD|36667950
import
java.util.Scanner;
public
class
btm3
{
public
static
void
main(String[]
args
)
{
Scanner
s
=
new
Scanner(System.
in
)
;
System.
out
.println(
"Nhp 1 năm: "
)
;
int
nam
=
s
.nextInt();
switch
(
nam
% 12)
{
case
0:
System.
out
.println(
"Năm Thân"
)
;
break
;
case
1:
System.
out
.println(
"Năm Du"
)
;
break
;
case
2:
System.
out
.println(
"Năm Tut"
)
;
break
;
case
3:
System.
out
.println(
"Năm Hi"
;
)
break
;
case
4:
System.
out
.println(
"Năm Tý"
;
)
break
;
case
5:
System.
out
.println(
"Năm Su"
)
;
break
;
case
6:
System.
out
.println(
"Năm Dn"
)
;
break
;
case
7:
System.
out
.println(
"Năm Mão"
)
;
break
;
case
8:
System.
out
.println(
"Năm Thìn"
)
;
break
;
case
9:
System.
out
.println(
"Năm T"
)
;
break
;
case
10:
System.
out
.println(
"Năm Ng"
;
)
break
;
case
11:
System.
out
.println(
"Năm Mùi"
;
)
break
;
}
}
}
lOMoARcPSD|36667950
CẤU TRÚC LẶP
1/. Cấu trúc lặp:
cấu trúc cho phép thực hiện nhiều lần 1 lệnh / 1 nhóm lệnh theo biến đếm hoặc theo điều
kiện.
Lệnh break: ngắt / thoát khỏi vòng lặp o Khi gặp lệnh break bên trong một vòng lặp, vòng
lặp ngay lập tức kết thúc và điều khiển chương trình tiếp tục tại lệnh tiếp theo sau vòng lặp.
o Chúng ta thể sử dụng lệnh break Java trong tất cả các loại vòng lặp như vòng lặp
for, vòng lặp while và vòng lặp do-while.
Lệnh continue: tiếp tục lần lặp tiếp theo và bỏ qua các lệnh phía sau nó.
o Lệnh continue được sử dụng trong cấu trúc lặp khi ta cần chuyển đến bước lặp tiếp
theo của vòng lặp ngay lập tức. thể được sử dụng với vòng lặp for hoặc vòng
lặp while.
o Câu lệnh continue trong Java được sử dụng để tiếp tục vòng lặp. tiếp tục dòng hiện
tại của chương trình bỏ qua đoạn còn lại. Trong trường hợp ng lặp bên
trong, nó chỉ tiếp tục vòng lặp bên trong.
o Chúng ta thể sử dụng lệnh continue của Java trong tất cả các loại vòng lặp như vòng
lặp for, vòng lặp while và vòng lặp do-while.
2/. Lệnh For: là cấu trúc lặp thực hiện theo biến đếm
Cú pháp:
statement 1: lệnh khởi tạo biến đếm;
statement 2: điều kiện lặp; statement
3: lệnh tăng / giảm;
for (
statement 1
;
statement 2
;
statement 3
)
{
// Khi lnh đc thc thi
ượ
ốệ
}
lOMoARcPSD|36667950
o Statement 1 lệnh gán giá trị ban đầu cho biến đếm (khởi tạo) o Statement
2: điều kiện thi hành của for. o Statement 3: lệnh tăng / giảm biến đếm sẽ
thực hiện sau mỗi lần thi hành khối lệnh.
lOMoARcPSD|36667950
Sinh viên xem ví dụ và lắng nghe giải thích
Ví dụ 1: xuất ra các giá trị từ 0 đến 49
for (int i = 0; i < 50; i++)
{
System.out.println(i);
}
Ví dụ 2
:
Xuất ra các giá trị như thế nào ?
for (int i = 0; i <= 10; i++)
{
if (i == 5) {
break;
}
System.out.println(i);
}
Kết quả:
Ví dụ 3:
Dùng lệnh continue
public class ContinueExample {
public static void main(String[] args)
{
for(int i=1; i<=10; i++)
{
if(i==5)
{
// nó sẽ bỏ qua lệnh sau nó _ it will skip the rest statement
continue;
}
System.out.println(i);
}
}
Kết quả:
lOMoARcPSD|36667950
Ví dụ 5: 100 con Trâu, 100 bó cỏ.
Thuật toán: thử dần các giá trị số cho các biến
import java.util.Scanner;
public class Vd5
{ public static void main(String[] args)
{ int songhiem =0, trauDung, trauNam, trauGia; for(trauDung
=1; trauDung<=98; trauDung ++) for(trauNam =1; trauNam<=
100-trauDung ; trauNam ++) for(trauGia =1; trauGia<=100-
trauDung -trauNam ;
trauGia ++)
{ if ((trauDung + trauNam + trauGia == 100) &&
(trauGia %3==0) && ((trauDung*5) + (trauNam*3)+ (trauGia/3))==100) {
songhiem = songhiem +1;
System.out.println("Trâu đ ng: " +
trauDung + ", Trâu n m: " + trauNam + ", Trâu già: " + trauGia);
}
}
System.out.println("S nghi m c a bài toán: " +
songhiem);
}
}
2/. Lệnh while: là cấu trúc lặp theo điều kiện (với việc kiểm tra điều kiện được thực hiện trước)
pháp: thực hiện khối lệnh trong khi điều kiện còn đúng, dừng khi điều kiện sai.
Kết quả:
while (
condition
)
{
lOMoARcPSD|36667950
Ví dụ 6: thực hiện 10 lần, in giá trị: 1, 2, …, 8, 9, 10. Dừng khi i = 11.
3/. Lệnh do .. while: là cấu trúc lặp theo điều kiện (với việc kiểm tra điều kiện được thực hiện sau)
Cú pháp: thực hiện khối lệnh trong khi điều kiện còn đúng, dừng khi điều kiện sai.
// Khi lnh đc thc thi
ốệ
ượ
}
int i=1;
while (i<=10)
{
System.out.println(i);
i++;
}
lOMoARcPSD|36667950
Ví dụ 8: vòng lặp vô tận
do
{
// Khi lnh đc thc thi
ốệ
ượ
}
while (condition);
Ví dụ 7
Sv xác định kết quả in ra ?
:
int
i=
1
;
do
{
System.out.println(i);
i++;
}
while
(
i
<=
10
)
;
do
{
System.out.println("Vòng lặp do-while vô tận...");
}
while (true);
lOMoARcPSD|36667950
Kết quả:
Xuất ra kết quả: Vòng lặp do-while vô tận...
RC chọn Terminate/Disconnect All để dừng chương trình.
Ví dụ 9
:
public class VdDoWhile {
public static void main(String[] args)
{
int a = 1, sum = 0;
do
{
sum += a;
a++;
} while (a <= 10);
System.out.println("Tổng từ 1 đến 10 là: " + sum);
}
}
Kết quả:
Ví dụ 10
:
phân biệt
while
do … while
.
while (kiểm tra đk trước)
Do .. while (kiểm tra đk sau)
int
x
,
=0
i
=10
;
while
(
i
<10)
{
x
=
x
+
i
;
i
++
;
int
x
,
=0
i
=10
;
do
{
x
=
x
+
i
;
i
++
;
lOMoARcPSD|36667950
Bài tập mẫu 1: Viết chương trình nhập vào 1 số nguyên n, thực hiện tính giá trị của biểu thức sau:
S
n
= 1 + ½ + 1/3 + …+ 1/n
Input: int n;
Output: float Sn;
Bài tập mẫu 2: Viết chương trình nhập vào 2 số nguyên a, b, xác định ước số chung lớn nhất của
(a, b).
Input: int a, b;
Output: int uscln
Thuật toán : xác định USCLN(a, b) : trừ dần 2 số cho nhau đến khi a=b thì đó là uscln
}
System.
out
.println(
"x = "
+
x
)
;
}
while
(
i
;
<10)
System.
out
.println(
"x = "
+
x
)
;
Kt qu:
ế
Kt qu:
ế
Thuật toán
:
dùng for
import
java.util.Scanner;
public
class
Btm1
{
public
static
void
main(String[]
args
)
{
Scanner
s
=
new
Scanner(System.
in
;
)
int
i
,
n
;
float
sn
= 0.0f;
System.
out
.print(
"Nhp s n: "
ậố
)
;
n
=
s
.nextInt();
for
(
i
=1
;
i
<=
n
;
i
++)
sn
=
sn
+ (1/(
float
)
i
)
;
//nhớ ép kiểu float
System.
out
.format(
"Kt qu Sn: %.5f"
ế
,
sn
)
;
}
}
import
java.util.Scanner;
public
class
Btm2 {
public
static
void
main(String[]
args
)
{
Scanner
s
=
new
Scanner(System.
in
;
)
int
a
,
b
,
uscln
;
System.
out
.print(
"Nhp s a: "
ậố
)
;
a
=
s
.nextInt();
System.
out
.print(
"Nhp s b: "
ậố
)
;
lOMoARcPSD|36667950
Bài tập mẫu 3: Viết chương trình nhập vào 1 số hệ 10 (Decimal) thực hiện đổi số hệ 10 sang số hệ
8 (Octal).
Thuật toán: lấy số hệ 10 chia dư cho 8, để xác định số dư, lấy kết quả và tiếp tục chia dư cho 8 đến
khi bằng 0 thì dừng, xuất các giá trị số dư đảo ngược.
import
java.util.Scanner;
public
class
Btm3 {
public
static
void
main(String[]
args
)
{
Scanner
s
=
new
Scanner(System.
in
)
;
int
soDec
,
soOct
,
=0
sodu
,
dem
=1;
System.
out
.print(
"Nhp s h 10: "
ậốệ
;
)
soDec
=
s
.nextInt();
b
=
s
.nextInt();
while
(
a
!=
b
)
{
if
(
a
>
b
)
a
=
a
-
b
;
else
b
=
b
-
a
;
}
uscln
=
a
;
System.
out
.println(
"c s chung ln nht ca (a, b) = "
Ướố
ấủ
+
uscln
)
;
}
}
lOMoARcPSD|36667950
Bài tập mẫu 4: Viết chương trình nhập vào 1 số nguyên x, xác định số x có phải là số nguyên tố
hay không?
Thuật toán:
Dựa vào định nghĩa của số nguyên tố (là số chỉ chia hết cho 1 và chính nó), ta sẽ có được thuật toán
kiểm nguyên tố đơn giản nhất:
Kiểm tra các số từ 2 đến n - 1, nếu n chia hết cho một trong những số đó thì n không phải
là số nguyên tố. Ngược lại thì n là số nguyên tố. o Độ phức tạp thời gian (ĐPT) của thuật
toán trên là O(n)
Tuy nhiên, giống như thuật toán đếm số ước của n, ta hoàn toàn có thể cải tiến để giảm ĐPT:
while
(
soDec
!= 0)
{
// tính s 10 chia d cho 8 (s 10 % 8)
ư
sodu
=
soDec
% 8;
// ghi nhn s h 8 _ octal
ậốệ
soOct
+=
sodu
*
dem
;
// tính s mũ 10
dem
=
dem
* 10;
// tính thng ca (s 10 / 8)
soDec
/= 8;
}
System.
out
.println(
"S H 8 là: "
ốệ
+
soOct
)
;
}
}
o
ĐPT:
O(√n)
import
java.util.Scanner;
public
class
Btm4 {
public
static
void
main(String[]
args
)
{
Scanner
s
=
new
Scanner(System.
in
)
;
int
i
,
x
;
boolean
kt
=
true
;
System.
out
.print(
"Nhp s x: "
ậố
;
)
x
=
s
.nextInt();
i
=2
;
while
(
i
<
x
)
{
if
(
x
%
i
== 0)
{
kt
=
false
;
break
;
}
lOMoARcPSD|36667950
Kiểm tra các số từ 2 đến √n, nếu n chia hết cho một trong những số đó thì n không phải là
số nguyên tố. Ngược lại thì n là số nguyên tố.
else
i
++
;
}
if
(
kt
)
System.
out
.println(
"S "
+
x
+
" là s nguyên t"
;
)
else
System.
out
.println(
"S "
+
x
+
" không phi s nguyên
ảố
t"
)
;
}
}
| 1/42

Preview text:

lOMoARcPSD| 36667950
Chương này là chương tổng hợp và ôn tập kiến thức về các phép toán và kiểu dữ liệu đã học ở môn CSLT TOÁN TỬ TRONG JAVA 1/. Giới thiệu:
Toán tử trong java là một ký hiệu được sử dụng để thực hiện một phép tính/chức năng nào
đó. Java cung cấp các loại toán tử sau: • Toán tử số học • Toán tử bit • Toán tử quan hệ • Toán tử logic • Toán tử điều kiện • Toán tử gán
2/. Toán tử số học:
Các toán hạng của các toán tử số học phải ở dạng số. Các toán hạng kiểu boolean không sử
dụng được, các toán hạng ký tự cho phép sử dụng loại toán tử này. Một vài kiểu toán tử được
liệt kê trong bảng dưới đây.
Giả sử chúng ta có biến số nguyên a = 10 và b = 20. Toán Mô tả tử Ví dụ Cộng a + b sẽ là 30 +
Trả về giá trị là tổng của hai toán hạng Trừ a + b sẽ là – -1
Trả về kết quả là hiệu của hai toán hạng. Nhân a * b sẽ là 200 *
Trả về giá trị là tích của hai toán hạng. Chia b / a sẽ là 2 /
Trả về giá trị là thương của phép chia. Phép lấy modulo b % a sẽ là 0 %
Giá trị trả về là phần dư của phép chia Tăng dần a++ sẽ là 11 ++
Tăng giá trị của biến lên 1. Ví dụ a++ tương đương với a a = a + 1 lOMoARcPSD| 36667950 Giảm dần a– sẽ là 9 --
Giảm giá trị của biến 1 đơn vị. Ví dụ a– tương đương với a = a – 1 Cộng và gán giá trị a += 2 sẽ là 12
Cộng các giá trị của toán hạng bên trái vào toán hạng bên +=
phải và gán giá trị trả về vào toán hạng bên trái. Ví
dụ c += a tương đương c = c + a Trừ và gán giá trị a -= 2 sẽ là 8
Trừ các giá trị của toán hạng bên trái vào toán toán hạng
-= bên phải và gán giá trị trả về vào toán hạng bên trái. Ví dụ c -
= a tương đương với c = c – a Nhân và gán a *= 2 sẽ là 20
Nhân các giá trị của toán hạng bên trái với toán toán hạng *=
bên phải và gán giá trị trả về vào toán hạng bên trái. Ví dụ
c *= a tương đương với c = c*a Chia và gán a /= 2 sẽ là 5
Chia giá trị của toán hạng bên trái cho toán toán hạng bên
/= phải và gán giá trị trả về vào toán hạng bên trái. Ví dụ c
/= a tương đương với c = c/a Lấy số dư và gán a %= 8 sẽ là 2
Chia giá trị của toán hạng bên trái cho toán toán hạng bên %=
phải và gán giá trị số dư vào toán hạng bên trái. Ví dụ c
%= a tương đương với c = c%a
3/. Toán tử Bit (sinh viên tham khảo)
Các toán tử dạng bit cho phép chúng ta thao tác trên từng bit riêng biệt trong các kiểu dữ liệu nguyên thuỷ. Toán Mô tả tử ~ Phủ định NOT lOMoARcPSD| 36667950
Trả về giá trị phủ định của một bít. Toán tử AND &
Trả về giá trị là 1 nếu các toán hạng là 1 và 0 trong các trường hợp khác Toán tử OR |
Trả về giá trị là 1 nếu một trong các toán hạng là 1 và 0 trong các trường hợp khác. Toán tử Exclusive OR ^
Trả về giá trị là 1 nếu chỉ một trong các toán hạng là 1 và trả về 0 trong các trường hợp khác. Dịch phải
Chuyển toàn bộ các bít cuả một số sang phải một vị trí, giữ nguyên dấu của số >>
âm. Toán hạng bên trái là số bị dịch còn số bên phải chỉ số vị trí mà các bít cần dịch. Dịch trái <<
Chuyển toàn bộ các bít cuả một số sang trái một vị trí, giữ nguyên dấu cuả số âm.
Toán hạng bên trái là số bị dịch còn số bên phải chỉ số vị trí mà các bít cần dịch.
4/. Các toán tử quan hệ
Các toán tử quan hệ được sử dụng kiểm tra mối quan hệ giữa hai toán hạng. Kết quả của một
biểu thức có dùng các toán tử quan hệ là những giá trị Boolean (logic “true” hoặc “false”).
Các toán tử quan hệ được sử dụng trong các cấu trúc điều khiển. Toán tử Mô tả So sánh bằng = =
Toán tử này kiểm tra sự tương đương của hai toán hạng So sánh khác !=
Toán tử này kiểm tra sự khác nhau của hai toán hạng Lớn hơn >
Kiểm tra giá trị của toán hạng bên phải lớn hơn toán hạng bên trái hay không < Nhỏ hơn
Kiểm tra giá trị của toán hạng bên phải có nhỏ hơn toán hạng bên trái hay lOMoARcPSD| 36667950 không Lớn hơn hoặc bằng >=
Kiểm tra giá trị của toán hạng bên phải có lớn hơn hoặc bằng toán hạng bên trái hay không Nhỏ hơn hoặc bằng <=
Kiểm tra giá trị của toán hạng bên phải có nhỏ hơn hoặc bằng toán hạng bên trái hay không
5/. Các toán tử logic
Các toán tử logic làm việc với các toán hạng boolean. Các toán tử quan hệ được sử dụng
trong các cấu trúc điều khiển. Toán Mô tả tử Toán tử và (AND) &&
Trả về một giá trị “Đúng” (True) nếu chỉ khi cả hai toán tử có giá trị “True” Toán tử hoặc (OR) ||
Trả về giá trị “True” nếu ít nhất một giá trị là True Toán tử XOR ^
Trả về giá trị True nếu và chỉ nếu chỉ một trong các giá trị là True, các trường
hợp còn lại cho giá trị False (sai)
Toán tử phủ định (NOT) !
Toán hạng đơn tử NOT. Chuyển giá trị từ True sang False và ngược lại.
6/. Các toán tử điều kiện
Toán tử điều kiện là một loại toán tử đặc biệt vì nó bao gồm ba thành phần cấu thành biểu thức điều kiện. Cú pháp: ? : ;
biểu thức đk 1: Biểu thức logic. Trả trả về giá trị True hoặc False
biểu thức 2: Là giá trị trả về nếu biểu thức 1 xác định là True
biểu thức 3: Là giá trị trả về nếu biểu thức 1 xác định là False lOMoARcPSD| 36667950 Ví dụ: public class Test {
public static void main(String[] args) { int a = 20; int b = 3;
String s = (a % b == 0) ? "a chia het cho b" : "a khong chia het cho b"; System.out.println(s); } } Kết quả: a khong chia het cho b 7/. Toán tử gán
Toán tử gán (=) dùng để gán một giá trị vào một biến và có thể gán nhiều giá trị cho nhiều
biến cùng một lúc. Ví dụ: int var = 20; int p,q,r,s; p = q = r = s = var;
Trong ví dụ trên, đoạn lệnh sau gán một giá trị cho biến var và giá trị này lại được gán cho
nhiều biến trên một dòng lệnh đơn.
Dòng lệnh cuối cùng được thực hiện từ phải qua trái. Đầu tiên giá trị ở biến var được gán
cho ‘s’, sau đó giá trị của ‘s’ được gán cho ‘r’ và cứ tiếp như vậy.
Thứ tụ ưu tiên của các toán tử
Thứ tự ưu tiên quyết định trật tự thực hiện các toán tử trên các biểu thức. Bảng dưới đây liệt
kê thứ tự thực hiện các toán tử trong Java (từ trên xuống dưới) lOMoARcPSD| 36667950 X = a * (b / d) % e * f; Phép toán Thực hiện ++ , -- Phải trái /, *, % Trái phải + , - Trái phải < , <=, >, >= Trái phải = =, != Trái phải &&, || Trái phải
8/. Thay đổi thứ tự ưu tiên của các toán tử
Để thay đổi thứ tự ưu tiên trên một biểu thức, bạn có thể sử dụng dấu ngoặc đơn ():
• Phần được giới hạn trong ngoặc đơn được thực hiện trước.
• Nếu dùng nhiều ngoặc đơn lồng nhau thì toán tử nằm trong ngoặc đơn phía trong sẽ
thực thi trước, sau đó đến các vòng phía ngoài.
• Trong phạm vi một cặp ngoặc đơn thì quy tắc thứ tự ưu tiên vẫn giữ nguyên tác dụng. Ví dụ: lOMoARcPSD| 36667950 public class Test {
public static void main(String[] args) { int a = 20; int b = 5; int c = 10;
System.out.println("a + b * c = " + (a + b * c));
System.out.println("(a + b) * c = " + ((a + b) * c));
System.out.println("a / b - c = " + (a / b - c));
System.out.println("a / (b - c) = " + (a / (b - c))); } } Kết quả: a + b * c = 70 (a + b) * c = 250 a / b - c = -6 a / (b - c) = -4
CÁC KIỂU DỮ LIỆU TRONG JAVA 1/. Giới thiệu:
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)
• Các kiểu dữ liệu đối tượng (Object data)
2 /. Kiểu dữ liệu nguyên thủy
Java cung cấp các kiểu dữ liệu cơ bản như sau: Kiểu dữ Mô tả liệu byte
Dùng để lưu dữ liệu kiểu số nguyên có kích thước một byte (8 bít). Phạm vi
biểu diễn giá trị từ -128 đến 127. Giá trị mặc định là 0. lOMoARcPSD| 36667950 char
Dùng để lưu dữ liệu kiểu kí tự hoặc số nguyên không âm có kích thước 2 byte
(16 bít). Phạm vi biểu diễn giá trị từ 0 đến u\ffff. Giá trị mặc định là 0. boolean
Dùng để lưu dữ liệu chỉ có hai trạng thái đúng hoặc sai (độ lớn chỉ có 1 bít).
Phạm vi biểu diễn giá trị là {“True”, “False”}. Giá trị mặc định là False. short
Dùng để lưu dữ liệu có kiểu số nguyên, kích cỡ 2 byte (16 bít). Phạm vi biểu
diễn giá trị từ – 32768 đến 32767. Giá trị mặc định là 0. int
Dùng để lưu dữ liệu có kiểu số nguyên, kích cỡ 4 byte (32 bít). Phạm vi biểu
diễn giá trị từ -2,147,483,648 đến 2,147,483,647. Giá trị mặc định là 0. long
Dùng để lưu dữ liệu có kiểu số nguyên có kích thước lên đến 8 byte. Giá trị mặc định là 0L. float
Dùng để lưu dữ liệu có kiểu số thực, kích cỡ 4 byte (32 bít). Giá trị mặc định là 0.0F. double
Dùng để lưu dữ liệu có kiểu số thực có kích thước lên đến 8 byte. Giá trị mặc định là 0.00D Ví dụ: class B1 {
public static void main(String args[]) { boolean a = true; if (a == true)
System.out.println("Good Morning"); } } Kết quả: Good Morning
Ví dụ: Sinh viên giải thích
//CT minh họa kiểu dữ liệu byte trong Java lOMoARcPSD| 36667950 class B2 {
public static void main(String args[]) { byte a = 126;
//kiểu byte có giá trị là 8 bit System.out.println(a); a++; System.out.println(a);
//Bị tràn số(overflows) vì chỉ chứa giá trị -128 - 127 a++; System.out.println(a); a++; System.out.println(a); } } Kết quả: 126 127 -128 -127 Ví dụ: class B3 {
public static void main(String args[]) { //Khai báo kiểu character char a = 'G'; //Khai báo kiểu Integer int i=89;
//Dùng byte và short nếu chứa số nhỏ byte b = 4;
//sẽ báo lỗi nếu chứa số vượt phạm vi
//ví dụ: byte b1 = 7888888955; lOMoARcPSD| 36667950 short s = 56;
//sẽ báo lỗi nếu chứa số vượt phạm vi
//ví dụ: short s1 = 87878787878;
//giá trị mặc định cho phân số double double d = 4.355453532;
//với kiểu float dùng 'f' làm hậu tố (suffix) float f = 4.7333434f;
System.out.println("char: " + a);
System.out.println("integer: " + i);
System.out.println("byte: " + b);
System.out.println("short: " + s);
System.out.println("float: " + f);
System.out.println("double: " + d); } } Kết quả: char: G integer: 89 byte: 4 short: 56 float: 4.7333436 double: 4.355453532 3/. Kiểu String:
Trong ngôn ngữ lập trình Java, chuỗi (String) được xem là 1 dữ liệu dạng đối tượng (tức là
nó có các thuộc tính và phương thức - chi tiết về đối tượng chúng ta sẽ được học sâu hơn
trong chương Lập trình hướng đối tượng _ môn Kỹ thuật lập trình).
Chuỗi là 1 dãy các ký tự và được đặt trong cặp nháy kép.
Khai báo biến chuỗi:
String biến [= "chuỗi"]; Ví dụ:
String chuoi1, chuoi2 = "Việt Nam";
Khai báo đối tượng chuỗi:
String biến = new String("chuỗi"); Ví dụ: lOMoARcPSD| 36667950
String Str = new String("Chào Việt Nam"); Lưu ý:
+có thể nối 2 chuỗi bằng phép + s = "Đại
học " + "Nguyễn Tất Thành";
+Nhập chuỗi bằng phương thức scanner.nextLine(); Các Phương thức:
Tham khảo: https://www.w3schools.com/java/java_ref_string.asp
int compareTo (String
hay chữ thường và trả về giá trị: anotherString) 0: 2 chuỗi giống nhau lOMoARcPSD| 36667950
int compareToIgnoreCase (String Khác 0: 2 chuỗi khác nhau str) 11 int indexOf(int ch)
Trả về vị trí đầu tiên của ký tự ch cụ thể.
12 int indexOf(int ch, int fromIndex) Trả về vị trí của ký tự ch tính từ từ vị trí fromIndex.
13 int indexOf(String substring) Trả về vị trí đầu tiên của chuỗi con substring.
14 int indexOf(String substring, int Trả về chuỗi con đầu tiên chuỗi con tính từ vị fromIndex) trí fromIndex.
15 String toLowerCase() Trả về chuỗi chữ thường.
16 String toUpperCase() Trả về chuỗi chữ hoa / in.
17 String trim() Xóa khoảng trắng ở đầu và cuối của chuỗi.
18 boolean startsWith(String Kiểm tra tiền tố của chuỗi có khớp với chuỗi prefix)
prefix hay không?. Nếu có offset thì kiểm tra
từ vị trí offset trở đi.
boolean startsWith(String prefix, int offset)
String s = "java string sample";
System.out.println(s.startsWith("ja"));
System.out.println(s.startsWith("ja", 0));
System.out.println(s.startsWith("ja", 7));
System.out.println(s.startsWith("Python")); Kết quả:
19 boolean endsWith(String suffix) Kiểm tra hậu tố của chuỗi có khớp với chuỗi suffix hay không?. String s = "learning java";
System.out.println(s.endsWith("tutorial"));
System.out.println(s.endsWith("java")); Kết quả:
20 String split(String regex, int limit) Phương thức split() tách chuỗi này theo biểu lOMoARcPSD| 36667950
thức chính quy(regular expression) và trả về mảng chuỗi. Xem thêm:
https://www.geeksforgeeks.org/split-string - java-examples / Ví dụ:
tt = (char)sc.next().charAt(0); //đ c 1 ký t t chu i nh p vào t i v ọ ự ừ ỗ ậ ạ ị trí 0. String s1 = "Chào "; String s2 = "Vi t Nam"ệ ; String s3 = s1.concat(s2);
//k t qu là Chào Vi t Namế ả ệ String s4 = s2.concat(s1); String s1 = "Hello"; String s2 = "HELLO";
System.out.println(s1.equals(s2)); //false
System.out.println(s1.equalsIgnoreCase(s2)); //true String s1 = "Hello"; String s2 = "HELLO";
System.out.println(s1.compareTo(s2)); //32
System.out.println(s1.compareToIgnoreCase(s2)); //0
String s = "Chào Vi t Nam"ệ ;
System.out.println(s.substring(5)); // Viêt Nam
System.out.println(s.substring(0, 5)); //Chào String s1 = "Gà"; String s2 = "Gà c "ồ ;
String s3 = "Con Gà con m con Gà me, đu i con Gà b "ổ ổ ố ;
System.out.println(s3.contains(s1)); //true
System.out.println(s3.contains(s2)); //false char ch = 'G';
String s = "Con Gà con m con Gà me, đu i con Gà b "ổ ổ
ố ; int x1 = s.indexOf(ch); int x2 = s.indexOf(ch, 10);
System.out.println("V trí xu t hi n c a ký t G tính t v trí th 0 : ị ấ ệ ủ ự ừ ị ứ lOMoARcPSD| 36667950 " + x1); //4
System.out.println("V trí xu t hi n c a ký t G tính t v trí th 10: ị ấ ệ ủ ự ừ ị ứ " + x2); //18 String s1 = "Gà";
String s2 = "Con Gà con m con Gà me, đu i con Gà b "ổ ổ
ố ; int x1 = s2.indexOf(s1); int x2 = s2.indexOf(s1, 10);
System.out.println("V trí x1 : "ị + x1); //4
System.out.println("V trí x2 : "ị + x2); //18
String s = new String(" chào Vi t Nam "ệ ); s = s.trim(); String s1 = s.toLowerCase(); String s2 = s.toUpperCase();
System.out.println("Chu i s: "ỗ + s); //chào Vi t Namệ
System.out.println("Chu i s1: "ỗ + s1); //chào vi t namệ
System.out.println("Chu i s2: "ỗ + s2); //CHÀO VI T NAMỆ
String s = "Pin AAA t t h n Pin ABC"ố ơ ; s = s.replace('A', 'E');
System.out.println("Chu i s sau khi thay ký t A: "ỗ ự + s); //Pin EEE t t h n Pin EBCố ơ
s = s.replace("Pin", "Đèn");
System.out.println("Chu i s sau khi thay t Pin : "ỗ ừ + s); //Đèn EEE t t h n Đèn EBCố ơ 4/. Kiểu Char Khái niệm:
Từ khóa char trong Java là một kiểu dữ liệu nguyên thủy. Nó được sử dụng để khai báo các
biến và phương thức kiểu ký tự. Nó có khả năng giữ các ký tự Unicode 16-bit không dấu. Những điểm cần nhớ:
• Phạm vi ký tự nằm trong khoảng từ 0 đến 65,535 .
• Giá trị mặc định của nó là '\ u0000'.
• Kích thước mặc định của nó là 2 byte.
• Nó được sử dụng để lưu trữ các ký tự. lOMoARcPSD| 36667950
Lưu ý: 'a' khác v i ớ "a" Khai báo:
char biến [= ‘ký tự’]; Ví dụ: Ví dụ:
public class CharEx2 {
public static void main(String[] args) { char char1= 65 ; char char2= 97 ;
System.out.println( "char1: " + char1);
System.out.println( "char2: " + char2); } lOMoARcPSD| 36667950 }
Các phương thức của Char: (tham khảo thêm: https://www.javatpoint.com/post/java-character) Phương thức Mô tả isLetter()
Kiểm tra ký tự có phải là chữ cái hay không? isDigit() Kiểm tra
ký tự có phải là số hay không? isWhitespace()
Kiểm tra ký tự có phải là khoảng trắng hay không? isUpperCase()
Kiểm tra ký tự có phải là chữ in hay không? isLowerCase()
Kiểm tra ký tự có phải là chữ thường hay không? toUpperCase()
Đổi ký tự thành ký tự in toLowerCase() Đổi
ký tự thành ký tự thường toString()
Đổi ký tự thành chuỗi
Ví dụ: nhớ phải dùng thêm lớp Character khi gọi phương thức
public class BTMau3
{ public static void main(String[] args) l p ớ {
char ch1, ch2, ch3, ch4;
boolean b1, b2, b3, b4, b5; int x = 56; ch1 = 'a'; ch2 = 'B'; ch3 = ' '; ch4 = 'c';
b1 = Character.isLetter(ch1);
b2 = Character.isLowerCase(ch2);
b3 = Character.isWhitespace(ch3);
b4 = Character.isDigit(x); b5 =
Character.isDigit(ch4);
String str1 = "Bi n ch1 là ký t (letter): "ế ự + b1;
String str2 = "Bi n ch2 là ch th ng (lower-case): "ế ữ ườ + b2;
String str3 = "Bi n ch3 là kho ng tr ng (space): "ế ả ắ + b3;
String str4 = "Bi n x là ký s (digital): "ế ố + b4;
String str5 = "ch4 là ký s (digital): "ố + b5;
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
System.out.println(str5);
//Đ i ký t in, th ng, chu iổ ự ườ ỗ lOMoARcPSD| 36667950
System.out.println("Đ i ch1 thành ký t in: "ổ ự +
Character.toUpperCase(ch1));
System.out.println("Đ i ch2 thành ký t th ng: "ổ ự ườ +
Character.toLowerCase(ch2));
System.out.println("Đ i ch4 thành chu i (String): "ổỗ +
Character.toString(ch4));
System.out.println("K t thúc ch ng trình."ế ươ ); } Kết quả:
Ví dụ: nhập vào 1 ký tự, xuất ra ký tự đã nhập và mã Ascii tương ứng với ký tự. Chương trình thực
hiện nhiều lần khi nhấn ký tự khác (Y/y) thì dừng
import java.util.Scanner;
public class BTMau4 {
public static void main(String[] args ) {
Scanner sc = new Scanner(System. in ); char kt , tt ; do {
System. out .print( "Nhp 1 ký t : " ậ ự ) ;
kt = ( char ) sc .next().charAt(0);
System. out .println( "Ký t đã nhp là: " ự ậ + kt );
System. out .println( "Mã Ascii tng ng là: " + ( int ) kt );
System. out .print( "Có tip tc không (Y/N): " ếụ );
tt = ( char ) sc .next().charAt(0); }
while (Character. toLowerCase ( tt ) == 'y' ) ;
System. out .println( "Kt thúc Chng trình." ế ươ ) ; sc .close(); } } Kết quả: lOMoARcPSD| 36667950 5/. Biến:
A/. Khái niệm: Trong java, biến là tên của vùng nhớ, dùng chứa giá trị trong tính toán. Có 3
kiểu biến trong java, bao gồm biến local (biến cục bộ), biến instance (biến toàn cục) và biến static.
B/. Cú pháp khai báo:
[access modifier] datatype varName [ = value] [, varName2] [ = value2]...;
access modifier: dùng qui định cách truy xuất biến (học sau)
• public: biến là công khai • static: biến là tĩnh
• private: biến là riêng default: mặc định
datatype: là kiểu dữ liệu của biến. Ví dụ: int a, b, c; lOMoARcPSD| 36667950 long x =50, y = 12000;
C/. Quy tắc đặt tên biến trong java:
• Chỉ được bắt đầu bằng một ký tự (chữ), hoặc một dấu gạch dưới (_), hoặc một ký tự dollar($)
• Tên biến không được chứa khoảng trắng
• Không được trùng với các từ khóa
• Có phân biệt chữ hoa và chữ thường D/. Quy tắc Camel:
• 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ụ: diemTrungBinh, iPhone, eBay, fedEx, chieuDai, tyGia.
• Ngoài ra, trong một số trường hợp, tên biến cần phải 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, biến có kiểu là Map thì nên đặt tên là studentMap, biến có
kiểu là Array thì nên đặt tên là studentArray,... Vd: double dienTich, chieuDai,
chieuRong; E/. Biến local trong java:
• Biến local được khai báo trong các phương thức, hàm constructor hoặc trong các block.
• Biến local được tạo bên trong các phương thức, constructor, block và sẽ bị phá hủy
khi kết thúc các phương thức, constructor và block.
• Không sử dụng "access modifier" khi khai báo biến local.
• Các biến local được lưu trên vùng nhớ stack của bộ nhớ.
• Bạn cần khởi tạo giá trị mặc định cho biến local trước khi có thể sử dụng.
F/. Biến instance: biến instance (biến toàn cục) trong java (tham khảo thêm)
• Biến instance được khai báo trong một lớp (class), bên ngoài các phương thức, constructor và các block.
• Biến instance được lưu trong bộ nhớ Heap.
• Biến instance được tạo khi một đối tượng được tạo bằng việc sử dụng từ khóa “new”
và sẽ bị phá hủy khi đối tượng bị phá hủy.
• Biến instance có thể được sử dụng bởi các phương thức, constructor, block, ... Nhưng
nó phải được sử dụng thông qua một đối tượng cụ thể.
• Ta được phép sử dụng "access modifier" khi khai báo biến instance, mặc định là "default".
• Biến instance có giá trị mặc định phụ thuộc vào kiểu dữ liệu của nó. Ví dụ nếu là
kiểu int, short, byte thì giá trị mặc định là 0, kiểu double thì là 0.0, ... Vì vậy, ta sẽ
không cần khởi tạo giá trị cho biến instance trước khi sử dụng.
• Bên trong class mà bạn khai báo biến instance, ta có thể gọi nó trực tiếp bằng tên khi
sử dụng ở khắp nơi bên trong class đó. Ví dụ: lOMoARcPSD| 36667950 package Goiche;
public class Sinhvien {
// biến instance là ten có kiểu String, có giá trị mặc định là null public String ten ;
// biến instance là tuoi có kiểu Integer, có giá trị mặc định là 0
private int tuoi ;
// sử dụng biến ten trong một constructor
public Sinhvien(String ten ) { this . ten = ten ; }
// sử dụng biến tuoi trong phương thức setTuoi
public void setTuoi( int tuoi ) { this . tuoi = tuoi ; }
public void showStudent() {
System. out .println( "Tên : " + ten ) ;
System. out .println( "Tuổi : " + tuoi ) ; }
public static void main(String args []) {
Sinhvien sv = new Sinhvien( "Nguyen Van A" ); sv .setTuoi(21); sv .showStudent(); } }
G/. Biến static: Biến static trong java có qui định như sau: (tham khảo thêm)
• Biến static được khai báo trong một class với từ khóa "static", phía bên ngoài các
phương thức, constructor và block.
• Sẽ chỉ có duy nhất một bản sao của các biến static được tạo ra, dù bạn tạo bao nhiêu
đối tượng từ lớp tương ứng.
• Biến static được lưu trữ trong bộ nhớ static riêng.
• Biến static được tạo khi chương trình bắt đầu chạy và chỉ bị phá hủy khi chương trình dừng.
• Giá trị mặc định của biến static phụ thuộc vào kiểu dữ liệu bạn khai báo tương tự biến instance.
• Biến static được truy cập thông qua tên của class chứa nó, với cú pháp: TenClass.tenBien.
• Trong class, các phương thức sử dụng biến static bằng cách gọi tên của nó khi
phương thức đó cũng được khai báo với từ khóa "static". lOMoARcPSD| 36667950 Ví dụ:
package Goiche; public class Sinhvien2 { // biến static là ten
public static String ten = "Nguyen Van A";
// biến static là tuoi public static int tuoi =
21; public String diachi = "12 Trần Hưng
Đạo"; public static void main(String args[]) {
// Sử dụng biến static bằng cách gọi trực tiếp
System.out.println("Ten : " + ten);
// Sử dụng biến static bằng cách gọi thông qua tên class
System.out.println("Ten : " + Sinhvien2.tuoi);
System.out.println("Địa chỉ : " + diachi); } }
Ví dụ: Phân biệt các biến:
public class Variables
{ public String x1="Nguy n Ái Qu c"ễ ố ; //bi n toàn c cế ụ
public static String x2;
//bi n tĩnhế public
static void main(String[] args) { String a, x1; //bi n c c bế
ụ ộ a = "H Chí Minh"ồ ; x1 = "Nguy n T t Thành"ễ ấ ;
Variables doituong1 = new Variables();
Variables.x2 ="Nguy n Sinh Cung"ễ;
System.out.println("1/. Bi n c c b : "ế ụ ộ + a);
System.out.println("2/. Bi n c c bế ụ ộ : " + x1);
System.out.println("3/. Bi n toàn c c: "ế ụ + doituong1.x1);
System.out.println("4/. Bi n tĩnh : "ế + Variables.x2);
Variables doituong2 = new Variables();
doituong2.x1 = "Tôn Đ c Th ng"ứ ắắ ;
System.out.println("5/. Bi n toàn c c: "ế ụ + doituong2.x1); } } Kết quả:
1/. Biếến c c b : Hồồ Chí Minhụ ộ
2/. Biếến c c b : Nguyếnễ Tấết Thànhụ ộ
3/. Biếến toàn c c: Nguyếễn Ái Quồếcụ
4/. Biếến tĩnh : Nguyếễn Sinh Cung lOMoARcPSD| 36667950
5/. Biếến tòan c c: Tồn Đ c Thắnế gụ ứ
CẤU TRÚC ĐIỀU KHIỂN
1/. Lệnh If: là cấu trúc chuyển hướng thực hiện trong chương trình theo điều kiện
A/. If đơn: thực hiện khi điều kiện đúng
Cú pháp: Nếu điều kiện đúng thì thực hiện khối lệnh
if ( condition) { khối lệnh } Giải thích:
Chương trình kiểm tra điều kiện (condition).
Nếu điều kiện đúng (true), các đoạn mã (code) trong khối lệnh của if sẽ được thực thi.
Sau đó nó tiếp tục thực thi các mã phía dưới của khối lệnh if.
Nếu điều kiện sai (false), chương trình sẽ bỏ qua các đoạn mã trong khối lệnh của if, và
thực thi các đoạn mã phía dưới khối lệnh if.
B/. If Else: Thực hiện cho trường hợp điều kiện đúng hoặc sai.
Cú pháp: Nếu điều kiện đúng thì thực hiện khối lệnh 1, còn không (điều kiện sai) thì thực hiện khối lệnh 2. lOMoARcPSD| 36667950
if condition) ( { khối lệnh 1 } else { khối lệnh 2 }
Giải thích: sinh viên nghe giảng và tự giải thích
C/. If Else If: là dạng các lệnh If lồng nhau: Cú pháp:
if ( condition 1) { khối lệnh 1 lOMoARcPSD| 36667950 } else if (condition 2) { khối lệnh 2 } else if (condition N) { khối lệnh N } else { Khối lệnh else } lOMoARcPSD| 36667950
Giải thích: sinh viên nghe giảng và tự giải thích Ví dụ 1:
public class vidu1 {
public static void main(String[] args ) { int x = 100; int y = 80; if ( x > y ) {
System. out .println( "x ln hn y" ) ; } } } Ví dụ 2:
public class vidu2 {
public static void main(String[] args ) { int x = 500; int y = 1001; if ( x > y ) lOMoARcPSD| 36667950
System. out .println( "x ln hn y" ) ; else
System. out .println( "y ln hn x" ) ; } } Ví dụ 3:
public class vidu3 {
public static void main(String[] args ) { int time = 22; if ( time <= 10) {
System. out .println( "Good morning." ) ; }
else if ( time <= 20) {
System. out .println( "Good day." ; ) } else {
System. out .println( "Good evening." ) ; } } }
Bài tập mẫu 1: Viết chương trình nhập vào một điểm, tính xếp loại theo bảng sau:
Điểm >=9: xếp loại giỏi
Điểm >=7 và <9: xếp loại khá
Điểm >=5 và <7: xếp loại trung bình Còn lại xếp loại kém Input: float diem Output: chuỗi thông báo
import java.util.Scanner;
public class btm1 {
public static void main(String[] args ) {
Scanner s = new Scanner(System. in ; ) float diem ;
System. out .println( "Nhp đim s : " ậ ểố ; ) diem = s .nextFloat(); lOMoARcPSD| 36667950 if ( diem >= 9.0)
System. out .println( "Loi gii" ạ ỏ );
else if ( diem < 9.0 && diem >= 7.0)
System. out .println( "Loi khá" ạ );
else if ( diem < 7.0 && diem >= 5.0)
System. out .println( "Loi trung bình" ạ ) ; else
System. out .println( "Loi kém" ạ ) ; } }
Bài tập mẫu 2: Viết chương trình nhập vào số Km đã đi, tính tiền Taxi phải tra theo bảng sau:
Số Km <=3: giá 12000 đ / 1 Km
Số Km <=30: Km thứ 4 trở đi tính giá 9000 đ/ 1Km
Số Km <=70: Km thứ 31 trở đi tính giá 6000 đ / 1 Km
Số Km >70: tính giá 5800 đ / 1 Km cho số Km đã đi Input: float soKm Output: float soTien
import java.util.Scanner;
public class btm2 {
public static void main(String[] args ) {
Scanner s = new Scanner(System. in ) ;
float soKm , soTien =0 ;
System. out .println( "Nhp s Km đã đi : " ậố ; ) soKm = s .nextFloat(); if ( soKm <= 3.0) soTien = 12000 * soKm ;
else if ( soKm > 3.0 && soKm <= 30.0)
soTien = (12000 * 3) + (( soKm -3)*9000) ;
else if ( soKm > 30.0 && soKm <= 70.0)
soTien = (12000*3) + (9000*27) + (( soKm -30)*6000) ; else soTien = soKm * 5800;
System. out .println( "S tin phi tr : " ốề ả ả + soTien ) ; } }
Bài tập 15’: Viết chương trình nhập vào 1 năm, cho biết năm đó có nhuần hay không?
Biết năm nhuần là năm chia chẵn cho 4, đặc biệt năm đầu thế kỷ chỉ nhuần khi chia chẵn cho 400.
2/. Lệnh switch case: switch case được sử dụng để chuyển hướng thực hiện theo giá trị của biểu thức. Cú pháp: lOMoARcPSD| 36667950
switch (biểu thức) { case giá tri 1: Khối lệnh 1; break; case giá tri 2: Khối lệnh 2; break; ... case giá tri n: Khối lệnh n; break; default:
Khối lệnh này được thực hiện nếu tất cả
các giá trị trên không thỏa mãn; } lOMoARcPSD| 36667950
Giải thích: Sinh viên nghe giảng và ghi nhận Ví dụ 4: lOMoARcPSD| 36667950
import java.util.Scanner;
public class VD4 {
public static void main(String[] args ) {
Scanner s = new Scanner(System. in ; )
System. out .print( "Nhp mt ngày (1 ậộ -7) : " ) ;
int day = s .nextInt(); switch ( day ) { case 1:
System. out .println( "Monday" ) ; break ; case 2:
System. out .println( "Tuesday" ) ; break ; case 3:
System. out .println( "Wednesday" ) ; break ; case 4:
System. out .println( "Thursday" ) ; break ; case 5:
System. out .println( "Friday" ) ; break ; case 6:
System. out .println( "Saturday" ; ) break ; case 7:
System. out .println( "Sunday" ) ; break ; default :
System. out .println( "Không có ngày này !." ) ; }
System. out .println( "Bye." ) ; } }
Bài tập mẫu 3: Viết chương trình nhập vào 1 năm dương lịch (ví dụ 1998, 2020) cho biết năm đó là năm con giáp gì?
Biết năm 1968: 1968 % 12 = 0 – Năm Thân 1969 % 12 = 1 – Năm Dậu 1970 % 12 = 2 – Năm Tuất … lOMoARcPSD| 36667950
import java.util.Scanner;
public class btm3 {
public static void main(String[] args ) {
Scanner s = new Scanner(System. in ) ;
System. out .println( "Nhp 1 năm: " ậ ) ;
int nam = s .nextInt(); switch ( nam % 12) { case 0:
System. out .println( "Năm Thân" ) ; break ; case 1:
System. out .println( "Năm Du" ậ ) ; break ; case 2:
System. out .println( "Năm Tut" ấ ) ; break ; case 3:
System. out .println( "Năm Hi" ); break ; case 4:
System. out .println( "Năm Tý" ); break ; case 5:
System. out .println( "Năm Su" ử ) ; break ; case 6:
System. out .println( "Năm Dn" ầ ) ; break ; case 7:
System. out .println( "Năm Mão" ) ; break ; case 8:
System. out .println( "Năm Thìn" ) ; break ; case 9:
System. out .println( "Năm T" ) ; break ; case 10:
System. out .println( "Năm Ng" ọ ); break ; case 11:
System. out .println( "Năm Mùi" ; ) break ; } } } lOMoARcPSD| 36667950 CẤU TRÚC LẶP 1/. Cấu trúc lặp:
• Là cấu trúc cho phép thực hiện nhiều lần 1 lệnh / 1 nhóm lệnh theo biến đếm hoặc theo điều kiện.
Lệnh break: ngắt / thoát khỏi vòng lặp o Khi gặp lệnh break bên trong một vòng lặp, vòng
lặp ngay lập tức kết thúc và điều khiển chương trình tiếp tục tại lệnh tiếp theo sau vòng lặp.
o Chúng ta có thể sử dụng lệnh break Java trong tất cả các loại vòng lặp như vòng lặp
for, vòng lặp while và vòng lặp do-while.
Lệnh continue: tiếp tục lần lặp tiếp theo và bỏ qua các lệnh phía sau nó.
o Lệnh continue được sử dụng trong cấu trúc lặp khi ta cần chuyển đến bước lặp tiếp
theo của vòng lặp ngay lập tức. Nó có thể được sử dụng với vòng lặp for hoặc vòng lặp while.
o Câu lệnh continue trong Java được sử dụng để tiếp tục vòng lặp. Nó tiếp tục dòng hiện
tại của chương trình và bỏ qua đoạn mã còn lại. Trong trường hợp có vòng lặp bên
trong, nó chỉ tiếp tục vòng lặp bên trong.
o Chúng ta có thể sử dụng lệnh continue của Java trong tất cả các loại vòng lặp như vòng
lặp for, vòng lặp while và vòng lặp do-while.
2/. Lệnh For: là cấu trúc lặp thực hiện theo biến đếm Cú pháp:
for ( statement 1 ; statement 2 ; statement 3 ) { // Khi lnh đc thc thi ốệ ượ ự }
statement 1: lệnh khởi tạo biến đếm;
statement 2: điều kiện lặp; statement 3: lệnh tăng / giảm; lOMoARcPSD| 36667950
o Statement 1 là lệnh gán giá trị ban đầu cho biến đếm (khởi tạo) o Statement
2: là điều kiện thi hành của for. o Statement 3: lệnh tăng / giảm biến đếm sẽ
thực hiện sau mỗi lần thi hành khối lệnh. lOMoARcPSD| 36667950
Sinh viên xem ví dụ và lắng nghe giải thích
Ví dụ 1: xuất ra các giá trị từ 0 đến 49
for (int i = 0; i < 50; i++) { System.out.println(i); }
Ví dụ 2 : Xuất ra các giá trị như thế nào ?
for (int i = 0; i <= 10; i++) { if (i == 5) { break; } System.out.println(i); } Kết quả:
Ví dụ 3: Dùng lệnh continue
public class ContinueExample {
public static void main(String[] args) { for(int i=1; i<=10; i++) { if(i==5) {
continue; // nó sẽ bỏ qua lệnh sau nó _ it will skip the rest statement } System.out.println(i); } } Kết quả: lOMoARcPSD| 36667950
Ví dụ 5: 100 con Trâu, 100 bó cỏ.
Thuật toán: thử dần các giá trị số cho các biến
import java.util.Scanner;
public class Vd5
{ public static void main(String[] args) {
int songhiem =0, trauDung, trauNam, trauGia; for(trauDung
=1; trauDung<=98; trauDung ++) for(trauNam =1; trauNam<=
100-trauDung ; trauNam ++) for(trauGia =1; trauGia<=100- trauDung -trauNam ; trauGia ++)
{ if ((trauDung + trauNam + trauGia == 100) &&
(trauGia %3==0) && ((trauDung*5) + (trauNam*3)+ (trauGia/3))==100) { songhiem = songhiem +1;
System.out.println("Trâu đ ng: "ứ +
trauDung + ", Trâu n m: "ằ + trauNam + ", Trâu già: " + trauGia); } }
System.out.println("S nghi m c a bài toán: "ố ệ ủ + songhiem); } } Kết quả:
2/. Lệnh while: là cấu trúc lặp theo điều kiện (với việc kiểm tra điều kiện được thực hiện trước)
pháp: thực hiện khối lệnh trong khi điều kiện còn đúng, dừng khi điều kiện sai. while ( condition ) { lOMoARcPSD| 36667950 // Khi l ốệ nh đc th ư c ợ thi ự }
Ví dụ 6: thực hiện 10 lần, in giá trị: 1, 2, …, 8, 9, 10. Dừng khi i = 11. int i=1; while (i<=10) { System.out.println(i); i++; }
3/. Lệnh do .. while: là cấu trúc lặp theo điều kiện (với việc kiểm tra điều kiện được thực hiện sau)
Cú pháp: thực hiện khối lệnh trong khi điều kiện còn đúng, dừng khi điều kiện sai. lOMoARcPSD| 36667950 do { // Khi l ốệ nh đc th ư c ợ thi ự } while (condition);
Ví dụ 7 : Sv xác định kết quả in ra ? int i= 1 ; do { System.out.println(i); i++;
} while ( i <= 10 ) ;
Ví dụ 8: vòng lặp vô tận do {
System.out.println("Vòng lặp do-while vô tận..."); } while (true); lOMoARcPSD| 36667950 Kết quả:
Xuất ra kết quả: Vòng lặp do-while vô tận...
RC chọn Terminate/Disconnect All để dừng chương trình. Ví dụ 9 : public class VdDoWhile {
public static void main(String[] args) { int a = 1, sum = 0; do { sum += a; a++; } while (a <= 10);
System.out.println("Tổng từ 1 đến 10 là: " + sum); } } Kết quả:
Ví dụ 10 : phân biệt whiledo … while .
while (kiểm tra đk trước)
Do .. while (kiểm tra đk sau) int x =0, i =10 ; int x =0, i =10 ; while ( i <10) do { { x = x + i ; x = x + i ; i ++ ; i ++ ; lOMoARcPSD| 36667950 } } while ( i <10);
System. out .println( "x = " + x ) ;
System. out .println( "x = " + x ) ; Kt qu: ế Kt qu: ế
Bài tập mẫu 1: Viết chương trình nhập vào 1 số nguyên n, thực hiện tính giá trị của biểu thức sau: Sn = 1 + ½ + 1/3 + …+ 1/n Input: int n; Output: float Sn; Thuật toán : dùng for
import java.util.Scanner;
public class Btm1 {
public static void main(String[] args ) {
Scanner s = new Scanner(System. in ; ) int i , n ; float sn = 0.0f;
System. out .print( "Nhp s n: " ậố ) ; n = s .nextInt();
for ( i =1 ; i <= n ; i ++)
sn = sn + (1/( float ) i ) ; //nhớ ép kiểu float
System. out .format( "Kt qu Sn: %.5f" ế ả , sn ) ; } }
Bài tập mẫu 2: Viết chương trình nhập vào 2 số nguyên a, b, xác định ước số chung lớn nhất của (a, b). Input: int a, b; Output: int uscln
Thuật toán : xác định USCLN(a, b) : trừ dần 2 số cho nhau đến khi a=b thì đó là uscln
import java.util.Scanner;
public class Btm2 {
public static void main(String[] args ) {
Scanner s = new Scanner(System. in ; ) int a , b , uscln ;
System. out .print( "Nhp s a: " ậố ) ; a = s .nextInt();
System. out .print( "Nhp s b: " ậố ) ; lOMoARcPSD| 36667950 b = s .nextInt(); while ( a != b ) { if ( a > b ) a = a - b ; else b = b - a ; } uscln = a ;
System. out .println( "c s chung ln nht ca (a, b) = " Ướố ớ ấủ + uscln ) ; } }
Bài tập mẫu 3: Viết chương trình nhập vào 1 số hệ 10 (Decimal) thực hiện đổi số hệ 10 sang số hệ 8 (Octal).
Thuật toán: lấy số hệ 10 chia dư cho 8, để xác định số dư, lấy kết quả và tiếp tục chia dư cho 8 đến
khi bằng 0 thì dừng, xuất các giá trị số dư đảo ngược.
import java.util.Scanner;
public class Btm3 {
public static void main(String[] args ) {
Scanner s = new Scanner(System. in ) ; int soDec , soOct , =0 sodu , dem =1;
System. out .print( "Nhp s h 10: " ậốệ ; ) soDec = s .nextInt(); lOMoARcPSD| 36667950 while ( soDec != 0) {
// tính s 10 chia d cho 8 (s 10 % 8) ố ư ố sodu = soDec % 8; // ghi nhn s h 8 _ octal ậốệ soOct += sodu * dem ; // tính s mũ 10 ố dem = dem * 10; // tính thng ca (s 10 / 8) soDec /= 8; }
System. out .println( "S H 8 là: " ốệ + soOct ) ; } }
Bài tập mẫu 4: Viết chương trình nhập vào 1 số nguyên x, xác định số x có phải là số nguyên tố hay không? Thuật toán:
Dựa vào định nghĩa của số nguyên tố (là số chỉ chia hết cho 1 và chính nó), ta sẽ có được thuật toán
kiểm nguyên tố đơn giản nhất:
Kiểm tra các số từ 2 đến n - 1, nếu n chia hết cho một trong những số đó thì n không phải
là số nguyên tố. Ngược lại thì n là số nguyên tố. o Độ phức tạp thời gian (ĐPT) của thuật toán trên là O(n)
Tuy nhiên, giống như thuật toán đếm số ước của n, ta hoàn toàn có thể cải tiến để giảm ĐPT: o ĐPT: O(√n)
import java.util.Scanner;
public class Btm4 {
public static void main(String[] args ) {
Scanner s = new Scanner(System. in ) ; int i , x ;
boolean kt = true ;
System. out .print( "Nhp s x: " ậố ); x = s .nextInt(); i =2 ; while ( i < x ) { if ( x % i == 0) { kt = false ; break ; } lOMoARcPSD| 36667950 else i ++ ; } if ( kt )
System. out .println( "S " ố + x + " là s nguyên t" ố ố ; ) else
System. out .println( "S "
ố + x + " không phi s nguyên ảố t" ố ) ; } }
Kiểm tra các số từ 2 đến √n, nếu n chia hết cho một trong những số đó thì n không phải là
số nguyên tố. Ngược lại thì n là số nguyên tố.