27 bài tập java có bài giải cụ thể – Tài liệu text

27 bài tập java có bài giải cụ thể

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (235.67 KB, 41 trang )

CHƯƠNG I – BẮT ĐẦU VỚI JAVA
Bài 1 – Hello world
Bạn hãy xem bài của anh CEO trong JVN
Bài 2 – In ra chuỗi nhập vào
Bài đầu tiên của bạn, bạn đã học cách để Java in cái gì đó ra màn hình, trong bài này, bạn
sẽ học cách nhập vào cái gì đó và Java in cái đó ra màn hình. Gõ cái này đi bạn (lưu ý, bạn
phải gõ, không được copy và paste)
import java.io.*;
public class Hello {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.print(“Your name is: “);
String str;
str = in.readLine();
System.out.println(“Welcome ” + str + ” to Java”);
}
}
Xin hỏi, tôi đã bắt đầu với một vài ví dụ, mà tôi chẳng hiểu cái gì cả.
Xin trả lời, bạn sẽ học Java qua các ví dụ, rất nhiều ví dụ, lí thuyết thì bạn chỉ học từ từ
thôi.
*Lí thuyết: cấu trúc một chương trình Java
public class Core {
public static void main(String[] args) {
System.out.println(“Hello,Everybody in the World!”);
}
}
public class Core bạn bắt đầu một lớp Java
public static void main(String[] args) đây là một phương thức main trong Java, để cho
chương trình chạy được. Tạm thời bạn phải gõ y như thế này
System.out.println(“Hello,Everybody in the World!”) đây là một câu lệnh trong Java, đơn

giản nó chỉ in ra chuỗi nằm trong 2 dấu “” ra màn hình.
Mọi lớp và phương thức trong Java mở ra bằng { và đóng lại bằng }
Mọi câu lệnh trong java kết thúc bằng ;
Bài 3 – Biến trong Java
import java.io.*;
public class Hello {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.print(“Nhap a: “);
int a = Integer.parseInt(in.readLine());
System.out.print(“Nhap b: “);
int b = Integer.parseInt(in.readLine());
int ketqua;
ketqua = a+b;
System.out.println(“Ket qua bai toan a+b la: “ + ketqua);
}
}
Nhập thử 2 số a và b vào đi bạn, kết quả bài toán a+b sẽ được in ra.
*Lí thuyết:
import java.io.*;
public class Hello {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.print(“Your name is: “);
String str;
str = in.readLine();
System.out.println(“Welcome ” + str + ” to Java”);
}

}
Tạm thời, trong chương trình này, bạn chỉ nên quan tâm đến dòng
String str khai báo biến str kiểu chuỗi, và
System.out.println(“Welcome ” + str + ” to Java”)
Đây cũng là dòng System.out.println như chương trình đầu, có khác là + str + tức là đưa
một biến vào chuỗi in ra. Chỉ đến đó thôi nhé, sau đó, hãy quan tâm đến bài hôm nay
System.out.print(“Nhap a: “);
int a = Integer.parseInt(in.readLine());
System.out.print(“Nhap b: “);
int b = Integer.parseInt(in.readLine());
int ketqua;
ketqua = a+b;
System.out.println(“Ket qua bai toan a+b la: “ + ketqua);
Giải thích
import bạn nhập class hay thư viện chuẩn, tạm thời đừng quan tâm nó là gì, chỉ cần nhớ là
có nó để chương trình chạy
System.out.print in ra một chuỗi, nhưng không xuống dòng
System.out.println in ra một chuỗi, nhưng xuống dòng
int ketqua tức là khai báo biến ketqua kiểu int
ketqua = a+b tức là gán kết quả một biểu thức tính toán (ở đây là biến a + biến b) cho biến
ketqua
System.out.println(“Ket qua bai toan a+b la: “ + ketqua) thì đơn giản rồi, in cái dòng đó ra,
chỉ khác là nó đưa biến ketqua của bạn vào chuỗi đó
Bài 4 – Chia hết, chia lấy dư
*Lí thuyết: một số kiểu biến trong Java
Bạn đã biết 2 kiểu String (chuỗi) và int (nguyên) bây giờ bạn biết thêm kiểu float (thực)
Số nguyên và số thực bạn biết sự khác nhau rồi chứ. Bây giờ ta bắt đầu bài toán ví dụ
import java.io.*;
public class Hello {
public static void main(String[] args) throws Exception {

BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.print(“Nhap a: “);
float a = Float.parseFloat(in.readLine());
System.out.print(“Nhap b: “);
float b = Float.parseFloat(in.readLine());
float ketqua = a/b;
System.out.println(“Ket qua bai toan a+b la: ” + ketqua);
}
}
Bạn thử bài toán xem, nhớ đừng nhập số b=0 nhé, chuyện ấy sẽ xử lí sau.
Ví dụ nhập a=5, b=2, kết quả in ra sẽ là 2.5, thú vị phải không ?
Bây giờ cũng bài toán ấy, bạn thay đổi như sau
import java.io.*;
public class Hello {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.print(“Nhap a: “);
int a = Integer.parseInt(in.readLine());
System.out.print(“Nhap b: “);
int b = Integer.parseInt(in.readLine());
float ketqua = a/b;
System.out.println(“Ket qua bai toan a+b la: ” + ketqua);
}
}
Cũng nhập a=5, b=2, lần này kết quả in ra là … 2
Phép chia sẽ là phép chia hết nếu cả 2 toán hạng đều kiểu nguyên, gọi là chia lấy nguyên
(/) hay div
Bây giờ cũng chương trình ấy mà ta thay đổi lại chút xíu xem sao

import java.io.*;
public class Hello {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.print(“Nhap a: “);
int a = Integer.parseInt(in.readLine());
System.out.print(“Nhap b: “);
int b = Integer.parseInt(in.readLine());
float ketqua = a%b;
System.out.println(“Ket qua bai toan a+b la: ” + ketqua);
}
}
Cũng nhập a=5, b=2, lần này kết quả in ra là … 1
Đây là kết quả phép chia lấy dư 5 chia cho 2, gọi là chia lấy dư (%) hay mod
*Thế nếu tôi muốn 2 số nguyên chia nhau mà ra kiểu thực chứ không phải phép chia lấy
nguyên thì sao ? Trong trường hợp đó, bạn dùng “ép kiểu”
int a=5,b=2;float ket qua;
ketqua=(float)a/b;
Bài 5 – Lập trình OOP
Bạn xem bài của anh CEO trong JVN
class
Đây là một class, class này có hai property (thuộc tính) là name và age
public class Person
{
String name;
int age;
}
Đây là một class, class này ngoài property còn có constructor (khởi tạo) của class đó
public class Person

{
String name;
int age;
public Person(String name)
{
this.name = name;
}
}
Trong cái constructor này hãy lưu ý một điều, đó là biến this. Biến this có nghĩa là bản
thân cái class đó (ở đây là class Person).
Trong class Person có một property là age, câu this.age = age có nghĩa là cái thuộc tính age
của class Person sẽ nhận giá trị ở cái đối số age do constructor Person(int age) đưa vào.
Lưu ý là mọi class đều có sẵn ít nhất một constructor không có đối số.
Đây là một class, class này ngoài property, constructor còn có một behavior (hành vi)
public class Person
{
String name;
int age;
public Person(int age)
{
this.age = age;
}
public void Nhap()
{
nameonsole.readLine(“Nhap ho ten:”);
}
}
Khi ta viết câu lệnh sau
Person personOne = new Person(12);
Thì ta đã tạo ra một instance (thể hiện) là personOne của class Person

Bài 5 – Lập trình OOP (tiếp)
Khai báo một class
public abstract class MyClass {}
Từ thứ 1 là khai báo quyền truy xuất và kế thừa,có 3 loại
-public:được phép truy xuất từ bất cứ nơi nào và bất cứ lớp nào cũng được quyền kế thừa
-protected:chỉ có phương thức cùng gói được phép truy xuất và kế thừa
-private:chỉ có phương thức cùng gói được phép truy xuất nhưng không lớp nào được phép
kế thừa
-nếu không khai báo,mặc định là protected
Từ thứ 2 là khai báo một lớp trừu tượng hay là không trừu tượng
Nhiem vu: tao 1 lop Person, tao tiep 2 lop Students va Teachers ke thua lop Person, tao lop
Execute chua ham chinh de chay chuong trinh.
lop Person-
import corejava.*;
abstract class Person
{
//cai nay goi la cac property hay state-thuoc tinh cua doi tuong
String hoten;
int age;
String diachi;
int luong;
//cac constructor
public Person(int age)
{
this.age = age;
}
//cac method hay behavior-hanh vi cua doi tuong
public void Nhap()
{
hoten = Console.readLine(“Nhap ho ten:”);

diachi = Console.readLine(“Nhap dia chi:”);
}
//vi la 1 class thuoc loai abstract nen Person duoc phep khai bao
cac method khong co noi dung, noi dung cua class In se duoc cac lop ke
thua no them vao noi dung cua rieng no
public abstract void In();
public abstract int Tinhluong();
}
lop Students-
import corejava.*;
class Students extends Person
{
int MaSV,Malop;
public void Nhap()
{
super.Nhap();
MaSV = Console.readInt(“Nhap ma SV:”);
Malop = Console.readInt(“Nhap ma lop:”);
}
public void In()
{
System.out.println(hoten);
System.out.println(diachi);
System.out.println(MaSV);
System.out.println(Malop);
}
public int Tinhluong()
{
return 150000;
}

}
tu khoa super se goi ham Nhap() tu lop Person la cha cua lop Students
lop Teachers-
import corejava.*;
class Teachers extends Person
{
int Makhoa;
public void Nhap()
{
super.Nhap();
Makhoa = Console.readInt(“Nhap ma khoa::”);
}
public void In()
{
System.out.println(hoten);
System.out.println(diachi);
System.out.println(Makhoa);
}
public int Tinhluong()
{
return 500000;
}
}
lop Execute-
import corejava.*;
class Execute
{
public static void main(String args[])
{
Students st = new Students();

st.Nhap();
st.In();
st.luong=st.Tinhluong();
Teachers tc = new Teachers();
tc.Nhap();
tc.In();
tc.luong=tc.Tinhluong();
}
}
Khai báo một thuộc tính:
Khai báo 1 thuộc tính
public static void temp;
Từ thứ 1 là khai báo quyền truy xuất,có 3 loại
-public:được phép truy xuất từ bất cứ nơi nào
-protected:chỉ có lớp con mới được phép truy xuất
-private:chỉ có lớp đó xài(thuộc tính riêng của nó)
-nếu không khai báo,mặc định là protected
b.Từ thứ 2 là khai báo cách truy xuất(static)
static(tĩnh)
-nếu không khai báo,mặc định là không tĩnh
Tất cả các đối tượng thể hiện từ lớp cha đều được phép thay đổi giá trị của các thuộc tính
không tĩnh,còn giá trị của thuộc tính tĩnh thì không được phép thay đổi
public class Car
{
public string branch;
public int cost;
public static int tire=4;
}
Như ví dụ trên,tất cả các lớp con của lớp Car (như ToyotaCar,Peugeot,Mazda…) đều được
phép thay đổi các thuộc tính branch hay cost để phù hợp cho riêng mình,nhưng thuộc tính

tire (số bánh xe) không được phép thay đổi vì là thuộc tính tĩnh
Nói cách khác, chỉ có một và chỉ một thuộc tính có tên là tire trong class Car và tất cả các
class con của nó, vì vậy gọi là tĩnh
Khai báo một hành vi
Một phương thức được khai báo như sau
public static double ketqua()
Có 3 chỉ định truy xuất là public, protected và private
-public:được phép truy xuất từ bất cứ nơi nào
-protected:chỉ có lớp kế thừa lớp chứa nó được truy xuất
-private:chỉ lớp chứa nó được truy xuất(dùng nội bộ)
-nếu không khai báo,mặc định là protected
Có 6 chỉ định thuộc tính là static, abstract, final, native, synchronized (đồng bộ) và volatile
(linh hoạt)
static(tĩnh)
-nếu không khai báo,mặc định là không tĩnh
class TestObject
{
static void StaticMethod() {…}
void NonStaticMethod() {…}
}
Nếu là một phương thức không tĩnh, đầu tiên bạn phải khởi tạo một đối tượng,sau đó mới
được phép gọi phương thức
TestObject test=new TestObject();
test.NonStaticMethod();
Nếu là một phương thức tĩnh,bạn được phép gọi trực tiếp từ lớp
TestObject.StaticMethod();
abstract(trừu tượng)
Một phương thức trừu tượng không có nội dung.Nội dung của nó sẽ được các lớp con tùy
biến và phát triển theo hướng của riêng nó.
– final: không thể được extends hay override (ghi đè)

– native: thân phương thức viết bằng C hay C++
– synchronized: chỉ cho phép 1 thread truy cập vào khối mã ở cùng một thời điểm
– volatile: sử dụng với biến để thông báo rằng giá trị của biến có thể được thay đổi vài lần
vì vậy không ghi vào thanh ghi
.Từ thứ 3 là giá trị trả về.Nếu không có giá trị trả về thì là void
interface-template
Bây giờ ta có 1 khái niệm mới, là giao diện. Giao diện ra đời chính là để giải quyết đa kế
thừa. Mỗi lớp trong Java chỉ có 1 lớp cha, nhưng có thể implements nhiều giao diện.
Giao diện được khai báo giống như 1 lớp, cũng có state và behavior. Nhưng state của giao
diện là final còn behavior là abstract
Giả sử, ta sẽ khai báo một giao diện
public interface Product
{
//hai state duoi day la final, tuc la lop implements khong duoc
phep doi gia tri
static string maker = “My Corp”;
static string phone = “555-7767”;
//behavior duoi day la abstract, tuc la khong co noi dung
public int getPrice(int id);
}
Bây giờ, ta sẽ viết một class có cài đặt (implements) giao diện này
public class Shoe implements Product
{
public int getPrince(int id)
{
return (id= =1)?5:10;
}
public String getMaker()
{
return maker;

}
}
Muốn implements nhiều giao diện, làm như sau, ví dụ class Toyota extends Car
implements ActionCar, ActionMobilation
package-unit
Hãy tạo 1 thư mục có tên là Transport
Bên trong thư mục này hãy tạo 2 file là Car.java và Bicycle.java như sau
Car.java-
package Transport;
public class Car
{
public String manufacturer;
public int year;
}
Bicycle.java-
package Transport;
public class Bicycle
{
public int cost;
public Bicycle(int cost)
{
this.cost = cost;
}
}
Như vậy là ta đã tạo ra 1 gói chứa 2 lớp là Car và Bicycle. Bây giờ ta có 1 chương trình
muốn sử dụng gói này là TestProgram.java. Ta viết:
ViDuTransport.java-
import Transport.*;
class TestProgram
{

public static void main(String args[])
{
Car myCar = new Car();
myCar.manufacturer = “Toyota”;
Bicycle myBicycle = new Bicycle(1500);
}
}
Lưu ý nếu trong file ViDuTransport bạn không khai báo import Transport.* thì bạn vẫn có
thể khai báo tường minh như sau
Transport.Car myCar = new Transport.Car();
nạp chồng (overload) 1 phương thức
class Vidu
{
public satic void main(String a[])
{
private float cost;
public float CalculateSalePrice()
{
return cost*1.5;
}
public float CalculateSalePrice(double heso)
{
return cost*(1+heso);
}
}
}
Ở đây có 2 phương thức trùng tên CalculateSalePrice nhưng phương thức thứ 2 khác tham
số, gọi là nạp chồng
* nạp chồng (overload) và ghi đè (override)
Những phương thức được nạp chồng là những phương thức trong cùng một lớp, có cùng

một tên nhưng danh sách đối số khác nhau
Phương thức được ghi đè là phương thức có mặt ở lớp cha, được xác định là phương thức
chung cho các lớp con, rồi xuất hiện ở các lớp con
Nạp chồng là một hình thức đa hình (polymorphism) trong quá trình biên dịch (compile)
còn ghi đè là trong quá trình thực thi (runtime)
Bài 6 – Các kiểu dữ liệu nguyên thủy và phép toán

  !”#
$ %
 &’%
()$”*+,$-.(.* ,/0(01 &$

2)$3 ”4,$-.55.”6 $$5,15
“67 #,$-
.5889:.”6;”<+=
.5889>.”6?@+
.58AB8.”6CD
”#
>E:*%F1:GE%#,1H#,1I 

J”*”K
LMNN:”K,1L EO41
% P.Q.MNN”K  %RS*%F@.Q.
J”*)
()+T ”*,/GEUVW$-
U!XYPZVA[A\]M
JX^*
X^* _`,>Va% L,VV2 E
#b%*c +
”#P2VdePeC

,1% #eD%VVV
J>* ^*c
W/ f,1 gJN^ h %K
if K%:*j1 
>KN k*- f:*j1,$-
A8NZPZ
>+l k*- f:*j1,$-
A8lZPA
J>* ^*i4*
9PPmnmPnP%f,o”#
J>* ^*,/
9$4pp%$4qq$4r
JX^gg,1
X^1 E:S1gg”K”K1”Kgg
“K’*  k1^1 4 ,/
^** <
W/gg”K,1”K<Eh 4^*1%+/ %
/ 4^**
W/”Kgg,1”K<Eh 4^** %+/ %
/ 4^*1
JX^*
X^1 ESP\
X^*s ,$-gP\t1Pg\JP:t1
PJ:
Ja%<KT
(@K * ^*o E%<KTG%*f
k E * ^1Gf%*
X^gg,1
>* ^*+PgPPmmPnnP
Bài 7 – Mệnh đề if

nếu em đẹp thì tôi sẽ cưa em không thì tôi cưa đứa khác
IF em đẹp THEN tôi sẽ cưa em ELSE tôi cưa đứa khác
IF(em đẹp) tôi sẽ cưa em;
ELSE tôi cưa đứa khác;
Cú pháp (syntax) của mệnh đề IF là
if(mệnh đề) lệnh 1;
else lệnh 2;
Nếu mệnh đề đúng thì thực hiện lệnh 1;
Không thì thực hiện lệnh 2;
Ví dụ
if(a>b) System.out.println(“So lon nhat la “+a);
else System.out.println(“So lon nhat la “+b);
*Ta xây dựng một bài toán làm tròn số
Nhập vào một số bất kì. Nếu phần thập phân số này >=0.5, làm tròn tăng lên một đơn vị,
ngược lại giảm đi một đơn vị.
import java.io.*;
public class Hello {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.print(“Nhap a: “);
float a = Float.parseFloat(in.readLine());
float ketqua=a%1;
if(ketqua>=0.5) a=a-ketqua+1;
else a=a-ketqua;
System.out.println(“Ket qua bai toan la: ” + a);
}
}
* Phép điều kiện ? và phép chọn :
– Giả sử có mệnh đề if

if(a>b) a=2;
else a=0;
Phép điều kiện biểu diễn như sau a=a>b?2:0 nghĩa là nếu chân trị của a>b là đúng thì a=2
nếu là sai thì a=0
* Sau khi học xong if, bạn có rất nhiều bài tập để mà … làm, cổ điển nhất vẫn là giải
phương trình bậc một và hai, ngoài ra còn nhiều bài tập khác nữa. Ở đây chỉ có giải
phương trình bậc một. Bạn nên tìm nhiều bài tập để tự làm trước khi tiếp tục phần kế.
Ví dụ: phương trình bậc 1
import java.io.*;
public class Hello {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.println(“Giai phuong trinh bac nhat dang
ax+b=0″);
System.out.print(“Nhap he so a: “);
float a = Float.parseFloat(in.readLine());
System.out.print(“Nhap he so b: “);
float b = Float.parseFloat(in.readLine());
if(a==0) {
if(b==0) System.out.println(“Phuong trinh vo so
nghiem”);
if(b!=0) System.out.println(“Phuong trinh vo
dinh”);
}
else System.out.println(“Phuong trinh mot nghiem x=” +
-b/a);
}
}
Bài 8 – switch

Bạn đã học xong if. Bạn muốn dùng vòng lặp if để đánh giá điểm số nhập vào. Bạn sẽ viết
chương trình sau đây
import java.io.*;
public class Hello {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.print(“Nhap diem so: “);
int diem = Integer.parseInt(in.readLine());
if(diem<=2) System.out.println(“Yeu”);
if((diem>2) && (diem<=3)) System.out.println(“Trung
binh”);
if((diem>3) && (diem<=4)) System.out.println(“Kha”);
if((diem>4) && (diem<5)) System.out.println(“Gioi”);
if(diem==5) System.out.println(“Xuat sac”);
}
}
Thay vì lặp lại những câu if ấy, bạn nên dùng switch
import java.io.*;
public class Hello {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new
InputStreamReader(System.in));
System.out.print(“Nhap diem so: “);
int diem = Integer.parseInt(in.readLine());
switch(diem)
{
case 0:
case 1:
case 2:System.out.println(“Yeu”);break;

case 3:System.out.println(“Trung binh”);break;
case 4:
case 5:System.out.println(“Gioi”);break;
default:System.out.println(“Vao sai”);
}
}
}
*break với switch: break sẽ thoát ngay ra khỏi khối lệnh trong thân của switch
Bài 9 – String
* ,/>’%1/ _`,V’%+T ”*+

‘%P0(#0M
>:’%”)g
‘#VV%0u%0gM
`, Efv ” sO41
,1’%Vwb1!”#o E 1
‘%xy,300g
>* #% ’%
J”%
‘%AP0(#0M
‘%:PAV”%8[MNN”z@G$s8s 1.(.
[$s 10(#0
J#
PAV#MNNs 1”)\
J %Q
% PAV %Q[MNNs 1”)..
{|1#<$s%’% * $%’%
+T *G8
J#i
%e# & E &$ I

b##i%f,o”#
“#”PV#iM
‘%IO44Ib
+HPP
J %#a
P:V %#aAM
n8:nA
m8:mA
P8:PA
‘*O:,1A1*sO$@ _
&,$-0 0n0}”#0
J>%Q%%~ &%f$
%•€ PAV>%Q%%M
J#e•H
‘%AP0(#‚,#%”0M
‘%:P00M
PAV#e•H:MNNh”)[
{|1#%f,o,F%$ _ &:% &AKI
<h%f,oA
J>G’%%O4
>GO4%’%*61b00g
++T S<fb * #+=sV
>* #1)%EL,V% *  9#
‘%Y##%ƒ„w”#
‘%P0:Z80M
PY##%V%#YMNNh”):Z8
a+=,/ * #9#V%#9#’%V%#’%
„V%#„VVV
Bài 10 – vòng lặp for
for(int i=0;i<n;i++)

s+=i;
3 thành phần trong câu for ta có thể bỏ hết nhưng phải giữ lại các dấu ; khi đó nến muốn ta
có thể đặt phép toán điều khiển vòng lặp trong thân lệnh như sau
for(int i=0;i<n;)
{
s+=i;
i++;
}
*break với for: break sẽ thoát ngay ra khỏi vòng for
for(int i=0;i<n;i++)
{
System.out.println(i);break;
System.out.println(“Tiep tuc”);
}
Kết quả in ra không có câu “Tiep tuc” vì break nhảy ngay ra khỏi vòng for sau khi in 1
*continue với for: continue sẽ khiến vòng for bắt đâu 1 chu trình mới và bỏ qua tất cả các
lệnh bên dưới nó
VD: in tất cả các số từ 0 đến 10, bỏ qua 3,4,5
for(int i=0;i<10;i++)
{
if((i= =3)||(i= =4)||(i= =5)) continue;
System.out.println(i);
}
Bài 11 – while
while(biểu thức)
lệnh;
Nếu biểu thức đúng thì thực hiện lệnh
*break với while: break sẽ thoát ngay ra khỏi vòng while
int i=0;
while(i<10)

{
System.out.println(i);break;
i++;
}
Sẽ chỉ in ra 0
* continue với while: nó sẽ xác định giá trị biểu thức viết ngay sau while
int i=0;
while(i<10)
{
System.out.println(i);continue;
i++;
}
Ta sẽ được một loạt in 0 vô tận
Bài 12 – vòng lặp do while
do
lệnh;
while(biểu thức);
Nếu biểu thức đúng thì tiếp tục thực hiện lệnh
*break với do while: break sẽ thoát ngay ra khỏi vòng while
int i=0;
do
{
System.out.println(i);break;
i++;
}
while(i<10);
Sẽ chỉ in ra 0
* continue với while: nó sẽ xác định giá trị biểu thức viết ngay sau
while
int i=0;

do
{
System.out.println(i);continue;
i++;
}
while(i<10);
Ta sẽ được một loạt in 0 vô tận
Bài 13 – array
a”*Af,/ |4,1I  @
j
•€M
a,…,/`,b+T %% @fRS
%%E,1† 1f  @j
•€M
P#d•A88€M
( | E,KS1 |
•€P#d•A88€M
`,hRSfA88@jo1 E*s
G8K]]
2f E*%F@2fS1I @#d1 D ‡
@@j
•€PˆA[\‰Š:A‹M
Các method với mảng
J#
#1h  @j _f,$-*
*%F  * @j _f
H%P8MmV#MggqqPM+Œ1#If
#
J’#V%% 
ufj”@ E:f

•€PˆAZ\B]AAAZA\‹M
•€Pˆ:[‰ŠA8A:A[‹M
#%% %E’#
‘#V# Z:[M
h %f/1ˆ:[B]AAAZA[‹
#1hK[@j$G@js:%
f”)@@j$G@jsZ%f
Các method nằm trong class java.util.Arrays
J,%
•EhzeKfv@
•€Pˆ:ŠBA[AA‹M
Q%%V%M
J”%’#% 
•Eh<,F%$ _@j%f%f,oAK
I<
•€Pˆ:ŠBA[AA‹M
PQ%%V”%’#% A[Mh”):
Mảng nhiều chiều
•€•€P#d•A88€•\8€M
(3 ”*Af E*%F@V{|1f: o[
@j1[fA o&fA o sZ@j
•€•€P
ˆ
ˆA‰Z:‹
ˆ\A8AA‹
ˆ]‰B‹
ˆ[A\A[‹
‹M
Bài 14 – ngoại lệ
int x,y;

x=10;y=x-10;
x=x/y;
Khi chạy đoạn mã này bạn sẽ thấy xuất hiện thông báo
java.lang.ArithmeticException: divide by zero
Và chương trình sẽ thoát ra ngay lúc đó. Muốn chương trình chạy tiếp và không thoát ra, ta
đón “bắt” ngoại lệ này, đưa ra biến e, cuối cùng in e (để xem là ngoại lệ gì)
int x,y;
try
{
x=10;y=x-10;
x=x/y;
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
Xử lí ngoại lệ (Exception)
Để “ném” ngoại lệ do bất cứ dòng mã nào trong một phương thức sinh ra, bạn có thể khai
báo để ném bỏ ngoại lệ đó
public void divide() throws Exception
{
int a=5/0;
}
hoặc nếu muốn “bắt” ngoại lệ đó lại để xem đó là ngoại lệ gì để xử lí, bạn “bắt” nó rồi in ra
try
{
int a=5/0;
}
catch(Exception e)
{

System.out.println(e.getMessage());
}
Nếu muốn chương trình thành công thì sinh thông báo thành công, thất bại thì sinh thông
báo ngoại lệ, bạn có thể dùng
boolean done=false;
try
{
int a=5/b;
done=true;
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
if(done==true) System.out.println(“Successful”);
Bài 15 – Vector (mảng không giới hạn số phần tử)
>* #%”11)R: L,VVW# %,1
L,VV‚#%
”*
W# %,P#dW# %M
•…O4 W# % >#)%E
%#L,
ƒ+Œ1&@j _W# %of1+T
f E#dY##%+,1”KVa+=
,/9#ƒ„VVV

ˆ
P>#V%#Y00M
HrP8,V‚###dY##%M

d#rP8M
Y% * @j _W# %
H%P8Mm,V}#Mgg
‘#VV%,V###QM
{+W# %,of 6* +,o
‚#%f
‚#%#P,V###M
•+,… Ef#‚#% ^IW# %
,6ej$I-KW# %,
Y% * @j _‚#%
d##V2%#‚##
‘#VV%#V#e‚##M
Bài 16 – Lớp nội (lớp nằm trong lớp khác)
public class TestProgram
{
static int currentCount;
static class Apple
{
int weight;
public Apple(int weight)
{
this.weight=weight;
currentCount++;
}
public int Weight()
{
return weight;
}
}
public static void main(String args[])

{
Apple a=new Apple(12);//khoi tao 1 quả tao nang 12kg
System.out.print(a.Weight());
}
}
Ở đây ta thấy lớp nội Apple trong lớp TestProgram, khi biên dịch Java sẽ làm xuất hiện 2
file là TestProgram.class và TestProgram$Apple.class. Ưu điểm khi sử dụng lớp nội là:
– thể hiện tính đóng gói cao
– các lớp nội có thể truy xuất trực tiếp các biến của lớp cha
Lưu ý là lớp nội khác với các lớp mà nằm chung một file, ví dụ như tập tin MainClass.java
dưới đây
public class MainClass
{
}
class Subclass
{
}
Khi biên dịch nó sẽ tạo ra 2 file là MainClass.class và Subclass.class
Bài 17 – Tạo tập tin jar tự chạy
ufj +=%< _”S E,1U#V %EU# +=
%< $12X%V  ‡SV
9SŽSU#1HVH E+
2>2X%
9z” f $e* +Ks 1f E fe•
I<%< SL%I+T V
‘E”S,1l`QWQ•(•2‚l5″5 ^ f * …V 
_s-,1 fHVH,1E% SL%V#e#,/
•4+
L% H,HVH2X%%VL%JV 
a+=K”S+:+- %A,1%:,IU#

`Q‘<”S D’
L% H,HVH2X%%VL%JV %A%:
a%<L%hSU#2X%%VL%* b”S E S
+T Ifb4L,fjI EYw‚i#
  _”S
CHƯƠNG 2 – JAVA VÀ LẬP TRÌNH GIAO DIỆN BẰNG SWING
Đã đến lúc bạn nên sử dụng một IDE để công việc của mình nhanh chóng và dễ dàng hơn.
Applet đã trở thành đồ cổ, chúng ta nhảy luôn sang AWT – Swing
Bài 1 – Mở đầu về Swing
Chương trình này sẽ tạo một JFrame đơn giản nhất
import javax.swing.JFrame;
class HelloWorldSwing
{
public static void main(String[] a)
{
JFrame frame=new JFrame(“Main Frame”);//Main Frame la ten
cai cua so
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//ham dong
cua so lai
JLabel label=new JLabel(“Hello Everybody, label contain
context”);//mot doi tuong do hoa
frame.getContentPane().add(label);//dua doi tuong do hoa
vao trong frame
frame.pack();//”dong goi” lai toan bo trinh do hoa
frame.setVisible(true);//hien thi trinh do hoa ra man
hinh
}
}
Đây là một Frame đơn giản khác, nhưng có thể dùng dễ dàng cho việc mở rộng chương
trình

import javax.swing.JFrame;
import java.awt.*;
class Execute extends JFrame
{
Container container = getContentPane();
public Execute(String title)
{
super(title); //tuong duong JFrame(title)
Label label=new Label(“Hello Everybody, label contain
context”);
container.add(label);
}
public static void main(String a[])
{
Execute exe = new Execute(“Frame”);
exe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
exe.pack();
exe.setVisible(true);
}
}
Hỗ trợ tiếng Việt
Giả sử bạn muốn nút bấm của bạn có dòng “Việt Nam” và bạn không biết in như thế nào,
chương trình sau sẽ giúp bạn
JButton b=new JButton(“Vi\u1EC7t Nam”);
\u1EC7 là mã Unicode của kí tự ệ mà Java hỗ trợ. Tất cả kí tự Việt đều được hỗ trợ trong
Latin và Latin Extend
Lưu ý là chỉ có javax.swing mới hỗ trợ, java.awt không hỗ trợ
Bài 2 – Cài đặt bộ nghe và sự kiện cho các đối tượng đồ họa
Các đối tượng đồ họa sở dĩ có thể hoạt động được là nhờ có các bộ nghe “nghe” các hành
động mà người dùng tương tác với chuột hay bàn phím, và từ đó cho ra các sự kiện tương

ứng.
Trong ví dụ dưới đây ta có class EventQuit là một bộ nghe, bộ nghe này thực hiện phương
thức actionPerformed chính là chứa những sự kiện của bộ nghe đó. Đối tượng eventQuit là
một instance của class EventQuit. Để cài đặt bộ nghe này cho đối tượng đồ họa button ta
dùng phương thức addActionListener.
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
class Core extends JFrame
{
Container container = getContentPane();
public Core(String title)
{
super(title);
Button button = new Button(“My button”);
EventQuit eventQuit=new EventQuit();
button.addActionListener(eventQuit);
container.add(button);
}
public static void main(String a[])
{
Core exe = new Core(“Frame”);
exe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
exe.pack();
exe.setVisible(true);
}
class EventQuit implements ActionListener
{
public void actionPerformed(ActionEvent e)
{

System.exit(0);
}
}
}
Bây giờ, nếu ta muốn rút gọn, cài đặt bộ nghe và hành động trực tiếp, ta làm như sau
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
class Core
{
public static void main(String args[])
{
JFrame frame = new JFrame(“My frame”);
final JButton button = new JButton(“My button”);
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button)
System.exit(0); //nếu event này có source do button sinh ra
}
});
frame.add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Bài 3 – setLayout(null) đi đôi với setBounds
setLayout mạnh nhất trong Swing là setLayout(null) cho đối tượng add, còn đối với đối

tượng bị add thì setBounds, cú pháp setBounds(x,y,width,height)
Trên monitor, Java tính điểm có tọa độ (0,0) là điểm trái trên cùng. Sau đó trục hoành (x)
là chiều ngang monitor từ trái sang phải và trục tung (y) là chiều dọc monitor từ trên xuống
dưới
Phương thức này sẽ tạo ra một hình chữ nhật ảo bao quanh đối tượng bị add, hình chữ nhật
này có tọa độ góc đầu tiên là (x,y) và dài width cao height. Ví dụ như bài sau:
import javax.swing.JFrame;
import java.awt.*;
class Core
{
public static void main(String args[])
{
JFrame frame = new JFrame(“My frame”);
frame.setLayout(null);
JButton b1 = new JButton(“Button 1”);
b1.setBounds(0,0,100,25);
frame.add(b1);
JButton b2 = new JButton(“Button 2”);
b2.setBounds(100,0,100,25);
frame.add(b2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Như vậy là chúng ta đã setLayout(null) cho frame và lần lượt setBounds (kích thước cũng
như vị trí) cho 2 button. Vậy để set kích thước cũng như vị trí cho chính frame thì dùng 2
phương thức sau:
import javax.swing.JFrame;
import java.awt.*;
class Core

{
public static void main(String args[])
{
JFrame frame = new JFrame(“My frame”);
frame.setLayout(null);
JButton b1 = new JButton(“Button 1”);
b1.setBounds(0,0,100,25);
frame.add(b1);
JButton b2 = new JButton(“Button 2”);
b2.setBounds(100,0,100,25);
frame.add(b2);
frame.setLocation(200,100);
frame.setSize(200,60);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Bài này y chang bài trên, có khác là giờ đây vị trí điểm đầu của frame đã được xác định
bằng setLocation, Nếu không setLocation, mặc định là (0,0) còn kích thước được xác định
bằng setSize. Lưu ý là 200=chiều dài 2 cái button cộng lại còn 60=chiều rộng button +
chiều rộng thanh ban đầu (=35).
Bài 4 – setLayout không phụ thuộc phân giải màn hình
Với các ứng dụng nhỏ thì chưa cần quan tâm lắm. Với các ứng dụng trung bình và lớn thì
ứng dụng “co giãn” tùy theo độ phân giải sẽ là lợi thế lớn. Ta có thể lấy độ phân giải hiện
hành và tùy biến ứng dụng như sau:
import javax.swing.JFrame;
import java.awt.*;
public class Core
{
public static void main(String[] args)

{
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int screenWidth = screenSize.width;
int screenHeight = screenSize.height;
JFrame frame = new JFrame(“My frame”);
frame.setSize(screenWidth,screenHeight);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Để người dùng không thay đổi được size của mình, dùng frame.setResizable(false)
Bài 5 – Các đối tượng đồ họa cơ bản của Java
J9
9”P#d90•0M
”M
3 #d90•0M
9j-Q ƒ##%#4,1%o1

Jƒ”#
ƒ”#”#P#dƒ”#0a#H,##%#0M
ƒ”#1Ž
JX#
X##P#dX#M
X#1 sV
Bài 6 – Checkbox
Checkbox dùng để chuyển đổi trạng thái (state) giữa yes/no hay true/false. Khi state là true
thì ô đã được đánh dấu. Có 3 instructor thường dùng là:
Checkbox() Checkbox(String label) Checkbox(String label,boolean state) với label hiển thị

nhãn còn state là true/false
Để xác lập state cho một Checkbox ta dùng phương thức setState(true)
Để lấy state hiện hành của một Checkbox ta dùng phương thức getState()
Để xử lí tình huống của Checkbox khi nó thay đổi trạng thái, ta phải cho nó implements
giao diện ItemListener, và bên trong nó có phương thức itemStateChanged(ItemEvent e).
Còn để Checkbox thực hiện những hành động của lớp ấy thì ta phải dùng phương thức
addItemListener.
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
class Core
{
public static void main(String args[])
{
JFrame frame = new JFrame(“My frame”);
Checkbox checkbox=new Checkbox(“Documents”,false);
checkbox.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
System.out.println(“Changed”);
}
});
frame.add(checkbox);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Ở ví dụ này thì mỗi lần bạn thay đổi trạng thái Checkbox, màn hình Console sẽ in ra câu

“Changed” Bây giờ nếu bạn muốn màn hình in ra chỉ khi nào nó được chọn mà thôi, thì
sửa lại phương thức itemStateChanged như sau
if(e.getStateChange()==ItemEvent.SELECTED) System.out.println(“Changed”);
SELECTED và DESELECTED là 2 hằng số biển diễn trạng thái true hay false của
Checkbox
Bài 7 – Checkbox nhiều tùy chọn (CheckboxGroup)
Đầu tiên, hãy tạo một nhóm Checkbox như sau CheckboxGroup g=new CheckboxGroup();
Sau đó đưa các Checkbox muốn đưa vào nhóm Checkbox đó như sau
Checkbox c1=new Checkbox(“Option 1”,g,true);
Checkbox c2=new Checkbox(“Option 2”,g,false);
Checkbox c2=new Checkbox(“Option 2”,g,false);
Cả 3 cái cùng mang giá trị false cũng được, nhưng nếu là true thì chỉ được một cái true
Bài tập sau sẽ tạo một CheckboxGroup có 3 Checkbox. Để listener biết là Checkbox nào
được chọn, ta dùng phương thức getItem (trả về Object) Lưu ý là để cả 3 Checkbox cùng
hiển thị trên frame, ta dùng Panel
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
class Core
{
public static void main(String args[])
{
JFrame frame = new JFrame(“My frame”);
CheckboxGroup g=new CheckboxGroup();
Checkbox c1=new Checkbox(“Option 1”,g,true);
Checkbox c2=new Checkbox(“Option 2”,g,false);
Checkbox c3=new Checkbox(“Option 3”,g,false);
MyItemListener listener = new MyItemListener();
c1.addItemListener(listener);
c2.addItemListener(listener);

c3.addItemListener(listener);
Panel panel=new Panel();
frame.add(panel);
panel.add(c1);
panel.add(c2);
panel.add(c3);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
class MyItemListener implements ItemListener
{
public void itemStateChanged(ItemEvent e)
{
if(e.getStateChange()==ItemEvent.SELECTED)
{
Object temp=e.getItem();
String s=(String)temp;
System.out.println(s);
}
}
}
Lưu ý (String)temp thực ra là lấy cái label của Object temp. 2 lệnh có thể thay thế bằng 1
lệnh String s=(String)e.getItem();
Bài 8 – Choice
Choice myChoice = new Choice();
sau đó đưa mục chọn vào Choice như sau
myChoice.addItem(“Red”);
myChoice.addItem(“Green”);

myChoice.addItem(“Blue”);
Khi đó 3 mục chọn được đánh số lần lượt là 0,1,2 (đặt là i: thứ tự mục chọn)
Để bỏ mục chọn nào ra khỏi Choice, ta dùng myChoice.remove(i) với i là thứ tự mục chọn
Để bỏ tất cả mục chọn khỏi Choice, ta dùng myChoice.removeAll()
Để chọn mục chọn nào trong Choice, ta dùng muChoice.select(i)
Lưu ý là ta có thể dùng số thứ tự hoặc nhãn đều được, ví dụ myChoice.remove(“Blue”) hay
myChoice.remove(2) đều được. Và nếu có 10 mục chọn có nhãn là “Blue” thì
myChoice.remove(“Blue”) chỉ xóa mục chọn đầu tiên nó tìm thấy
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
class Core
{
public static void main(String args[])
{
JFrame frame = new JFrame(“My frame”);
Choice myChoice = new Choice();
myChoice.addItem(“Red”);
myChoice.addItem(“Green”);
myChoice.addItem(“Blue”);
myChoice.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
if(e.getStateChange()==ItemEvent.SELECTED)
{
String s=(String)e.getItem();
System.out.println(s);
}
}

});
frame.add(myChoice);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Bài 9 – List
W/># ”e k E cO:%S*%#NH# _
+TVW/># ”eu%,1> # k E
% * +TVW/ƒ E c,1+T
… $ cKV
23 F _ƒ1 kF[@jV>* +=
s RS
ƒhSƒ&@ c k c+T 1=
c
ƒhS* &@ c&@ c k
c+T 1+hF1 sIf
1[+3 F
ƒ”#2#  *%+1
&@ c+T  co@j† K2#1
%# c
•+,…ƒB,1ƒBH#1+FB1
† ,1&@ c k c+T 1
{@j,1ƒ
ƒƒP#dƒZ%#M
ƒV0X 0M
ƒV0>55>gg0M
ƒV0W90M
ƒV0`,0M

>* @j D+T *sG8V{@j,1,F
%$1+,1 k$ ,$-
ƒV0Q#”#%08M
{K@jS,F%$1b+=s
ƒV%# #Y#0W9V•‚a0:MNNW9”F”)W9V•‚a
{eE@j1b+=s %#,#
ƒV%#,#ZMƒV%#,#0`,0Mo+T VW1K E
A8-  c EŽ10`,0<ƒV%#,#0`,0 keE
@j@E<
{eE fbƒV%#,#QM
{ c@j,1”“ c@jb## ,1
### 
Bài 10 – Làm việc với List
* Với List đơn chọn
Để biết được phần tử nào đã được chọn, ta dùng 2 phương thức int getSelectedIndex() và

giản nó chỉ in ra chuỗi nằm trong 2 dấu “” ra màn hình.Mọi lớp và phương thức trong Java mở ra bằng { và đóng lại bằng }Mọi câu lệnh trong java kết thúc bằng ;Bài 3 – Biến trong Javaimport java.io.*;public class Hello {public static void main(String[] args) throws Exception {BufferedReader in = new BufferedReader(newInputStreamReader(System.in));System.out.print(“Nhap a: “);int a = Integer.parseInt(in.readLine());System.out.print(“Nhap b: “);int b = Integer.parseInt(in.readLine());int ketqua;ketqua = a+b;System.out.println(“Ket qua bai toan a+b la: “ + ketqua);Nhập thử 2 số a và b vào đi bạn, kết quả bài toán a+b sẽ được in ra.*Lí thuyết:import java.io.*;public class Hello {public static void main(String[] args) throws Exception {BufferedReader in = new BufferedReader(newInputStreamReader(System.in));System.out.print(“Your name is: “);String str;str = in.readLine();System.out.println(“Welcome ” + str + ” to Java”);Tạm thời, trong chương trình này, bạn chỉ nên quan tâm đến dòngString str khai báo biến str kiểu chuỗi, vàSystem.out.println(“Welcome ” + str + ” to Java”)Đây cũng là dòng System.out.println như chương trình đầu, có khác là + str + tức là đưamột biến vào chuỗi in ra. Chỉ đến đó thôi nhé, sau đó, hãy quan tâm đến bài hôm naySystem.out.print(“Nhap a: “);int a = Integer.parseInt(in.readLine());System.out.print(“Nhap b: “);int b = Integer.parseInt(in.readLine());int ketqua;ketqua = a+b;System.out.println(“Ket qua bai toan a+b la: “ + ketqua);Giải thíchimport bạn nhập class hay thư viện chuẩn, tạm thời đừng quan tâm nó là gì, chỉ cần nhớ làcó nó để chương trình chạySystem.out.print in ra một chuỗi, nhưng không xuống dòngSystem.out.println in ra một chuỗi, nhưng xuống dòngint ketqua tức là khai báo biến ketqua kiểu intketqua = a+b tức là gán kết quả một biểu thức tính toán (ở đây là biến a + biến b) cho biếnketquaSystem.out.println(“Ket qua bai toan a+b la: “ + ketqua) thì đơn giản rồi, in cái dòng đó ra,chỉ khác là nó đưa biến ketqua của bạn vào chuỗi đóBài 4 – Chia hết, chia lấy dư*Lí thuyết: một số kiểu biến trong JavaBạn đã biết 2 kiểu String (chuỗi) và int (nguyên) bây giờ bạn biết thêm kiểu float (thực)Số nguyên và số thực bạn biết sự khác nhau rồi chứ. Bây giờ ta bắt đầu bài toán ví dụimport java.io.*;public class Hello {public static void main(String[] args) throws Exception {BufferedReader in = new BufferedReader(newInputStreamReader(System.in));System.out.print(“Nhap a: “);float a = Float.parseFloat(in.readLine());System.out.print(“Nhap b: “);float b = Float.parseFloat(in.readLine());float ketqua = a/b;System.out.println(“Ket qua bai toan a+b la: ” + ketqua);Bạn thử bài toán xem, nhớ đừng nhập số b=0 nhé, chuyện ấy sẽ xử lí sau.Ví dụ nhập a=5, b=2, kết quả in ra sẽ là 2.5, thú vị phải không ?Bây giờ cũng bài toán ấy, bạn thay đổi như sauimport java.io.*;public class Hello {public static void main(String[] args) throws Exception {BufferedReader in = new BufferedReader(newInputStreamReader(System.in));System.out.print(“Nhap a: “);int a = Integer.parseInt(in.readLine());System.out.print(“Nhap b: “);int b = Integer.parseInt(in.readLine());float ketqua = a/b;System.out.println(“Ket qua bai toan a+b la: ” + ketqua);Cũng nhập a=5, b=2, lần này kết quả in ra là … 2Phép chia sẽ là phép chia hết nếu cả 2 toán hạng đều kiểu nguyên, gọi là chia lấy nguyên(/) hay divBây giờ cũng chương trình ấy mà ta thay đổi lại chút xíu xem saoimport java.io.*;public class Hello {public static void main(String[] args) throws Exception {BufferedReader in = new BufferedReader(newInputStreamReader(System.in));System.out.print(“Nhap a: “);int a = Integer.parseInt(in.readLine());System.out.print(“Nhap b: “);int b = Integer.parseInt(in.readLine());float ketqua = a%b;System.out.println(“Ket qua bai toan a+b la: ” + ketqua);Cũng nhập a=5, b=2, lần này kết quả in ra là … 1Đây là kết quả phép chia lấy dư 5 chia cho 2, gọi là chia lấy dư (%) hay mod*Thế nếu tôi muốn 2 số nguyên chia nhau mà ra kiểu thực chứ không phải phép chia lấynguyên thì sao ? Trong trường hợp đó, bạn dùng “ép kiểu”int a=5,b=2;float ket qua;ketqua=(float)a/b;Bài 5 – Lập trình OOPBạn xem bài của anh CEO trong JVNclassĐây là một class, class này có hai property (thuộc tính) là name và agepublic class PersonString name;int age;Đây là một class, class này ngoài property còn có constructor (khởi tạo) của class đópublic class PersonString name;int age;public Person(String name)this.name = name;Trong cái constructor này hãy lưu ý một điều, đó là biến this. Biến this có nghĩa là bảnthân cái class đó (ở đây là class Person).Trong class Person có một property là age, câu this.age = age có nghĩa là cái thuộc tính agecủa class Person sẽ nhận giá trị ở cái đối số age do constructor Person(int age) đưa vào.Lưu ý là mọi class đều có sẵn ít nhất một constructor không có đối số.Đây là một class, class này ngoài property, constructor còn có một behavior (hành vi)public class PersonString name;int age;public Person(int age)this.age = age;public void Nhap()nameonsole.readLine(“Nhap ho ten:”);Khi ta viết câu lệnh sauPerson personOne = new Person(12);Thì ta đã tạo ra một instance (thể hiện) là personOne của class PersonBài 5 – Lập trình OOP (tiếp)Khai báo một classpublic abstract class MyClass {}Từ thứ 1 là khai báo quyền truy xuất và kế thừa,có 3 loại-public:được phép truy xuất từ bất cứ nơi nào và bất cứ lớp nào cũng được quyền kế thừa-protected:chỉ có phương thức cùng gói được phép truy xuất và kế thừa-private:chỉ có phương thức cùng gói được phép truy xuất nhưng không lớp nào được phépkế thừa-nếu không khai báo,mặc định là protectedTừ thứ 2 là khai báo một lớp trừu tượng hay là không trừu tượngNhiem vu: tao 1 lop Person, tao tiep 2 lop Students va Teachers ke thua lop Person, tao lopExecute chua ham chinh de chay chuong trinh.lop Person-import corejava.*;abstract class Person//cai nay goi la cac property hay state-thuoc tinh cua doi tuongString hoten;int age;String diachi;int luong;//cac constructorpublic Person(int age)this.age = age;//cac method hay behavior-hanh vi cua doi tuongpublic void Nhap()hoten = Console.readLine(“Nhap ho ten:”);diachi = Console.readLine(“Nhap dia chi:”);//vi la 1 class thuoc loai abstract nen Person duoc phep khai baocac method khong co noi dung, noi dung cua class In se duoc cac lop kethua no them vao noi dung cua rieng nopublic abstract void In();public abstract int Tinhluong();lop Students-import corejava.*;class Students extends Personint MaSV,Malop;public void Nhap()super.Nhap();MaSV = Console.readInt(“Nhap ma SV:”);Malop = Console.readInt(“Nhap ma lop:”);public void In()System.out.println(hoten);System.out.println(diachi);System.out.println(MaSV);System.out.println(Malop);public int Tinhluong()return 150000;tu khoa super se goi ham Nhap() tu lop Person la cha cua lop Studentslop Teachers-import corejava.*;class Teachers extends Personint Makhoa;public void Nhap()super.Nhap();Makhoa = Console.readInt(“Nhap ma khoa::”);public void In()System.out.println(hoten);System.out.println(diachi);System.out.println(Makhoa);public int Tinhluong()return 500000;lop Execute-import corejava.*;class Executepublic static void main(String args[])Students st = new Students();st.Nhap();st.In();st.luong=st.Tinhluong();Teachers tc = new Teachers();tc.Nhap();tc.In();tc.luong=tc.Tinhluong();Khai báo một thuộc tính:Khai báo 1 thuộc tínhpublic static void temp;Từ thứ 1 là khai báo quyền truy xuất,có 3 loại-public:được phép truy xuất từ bất cứ nơi nào-protected:chỉ có lớp con mới được phép truy xuất-private:chỉ có lớp đó xài(thuộc tính riêng của nó)-nếu không khai báo,mặc định là protectedb.Từ thứ 2 là khai báo cách truy xuất(static)static(tĩnh)-nếu không khai báo,mặc định là không tĩnhTất cả các đối tượng thể hiện từ lớp cha đều được phép thay đổi giá trị của các thuộc tínhkhông tĩnh,còn giá trị của thuộc tính tĩnh thì không được phép thay đổipublic class Carpublic string branch;public int cost;public static int tire=4;Như ví dụ trên,tất cả các lớp con của lớp Car (như ToyotaCar,Peugeot,Mazda…) đều đượcphép thay đổi các thuộc tính branch hay cost để phù hợp cho riêng mình,nhưng thuộc tínhtire (số bánh xe) không được phép thay đổi vì là thuộc tính tĩnhNói cách khác, chỉ có một và chỉ một thuộc tính có tên là tire trong class Car và tất cả cácclass con của nó, vì vậy gọi là tĩnhKhai báo một hành viMột phương thức được khai báo như saupublic static double ketqua()Có 3 chỉ định truy xuất là public, protected và private-public:được phép truy xuất từ bất cứ nơi nào-protected:chỉ có lớp kế thừa lớp chứa nó được truy xuất-private:chỉ lớp chứa nó được truy xuất(dùng nội bộ)-nếu không khai báo,mặc định là protectedCó 6 chỉ định thuộc tính là static, abstract, final, native, synchronized (đồng bộ) và volatile(linh hoạt)static(tĩnh)-nếu không khai báo,mặc định là không tĩnhclass TestObjectstatic void StaticMethod() {…}void NonStaticMethod() {…}Nếu là một phương thức không tĩnh, đầu tiên bạn phải khởi tạo một đối tượng,sau đó mớiđược phép gọi phương thứcTestObject test=new TestObject();test.NonStaticMethod();Nếu là một phương thức tĩnh,bạn được phép gọi trực tiếp từ lớpTestObject.StaticMethod();abstract(trừu tượng)Một phương thức trừu tượng không có nội dung.Nội dung của nó sẽ được các lớp con tùybiến và phát triển theo hướng của riêng nó.- final: không thể được extends hay override (ghi đè)- native: thân phương thức viết bằng C hay C++- synchronized: chỉ cho phép 1 thread truy cập vào khối mã ở cùng một thời điểm- volatile: sử dụng với biến để thông báo rằng giá trị của biến có thể được thay đổi vài lầnvì vậy không ghi vào thanh ghi.Từ thứ 3 là giá trị trả về.Nếu không có giá trị trả về thì là voidinterface-templateBây giờ ta có 1 khái niệm mới, là giao diện. Giao diện ra đời chính là để giải quyết đa kếthừa. Mỗi lớp trong Java chỉ có 1 lớp cha, nhưng có thể implements nhiều giao diện.Giao diện được khai báo giống như 1 lớp, cũng có state và behavior. Nhưng state của giaodiện là final còn behavior là abstractGiả sử, ta sẽ khai báo một giao diệnpublic interface Product//hai state duoi day la final, tuc la lop implements khong duocphep doi gia tristatic string maker = “My Corp”;static string phone = “555-7767”;//behavior duoi day la abstract, tuc la khong co noi dungpublic int getPrice(int id);Bây giờ, ta sẽ viết một class có cài đặt (implements) giao diện nàypublic class Shoe implements Productpublic int getPrince(int id)return (id= =1)?5:10;public String getMaker()return maker;Muốn implements nhiều giao diện, làm như sau, ví dụ class Toyota extends Carimplements ActionCar, ActionMobilationpackage-unitHãy tạo 1 thư mục có tên là TransportBên trong thư mục này hãy tạo 2 file là Car.java và Bicycle.java như sauCar.java-package Transport;public class Carpublic String manufacturer;public int year;Bicycle.java-package Transport;public class Bicyclepublic int cost;public Bicycle(int cost)this.cost = cost;Như vậy là ta đã tạo ra 1 gói chứa 2 lớp là Car và Bicycle. Bây giờ ta có 1 chương trìnhmuốn sử dụng gói này là TestProgram.java. Ta viết:ViDuTransport.java-import Transport.*;class TestProgrampublic static void main(String args[])Car myCar = new Car();myCar.manufacturer = “Toyota”;Bicycle myBicycle = new Bicycle(1500);Lưu ý nếu trong file ViDuTransport bạn không khai báo import Transport.* thì bạn vẫn cóthể khai báo tường minh như sauTransport.Car myCar = new Transport.Car();nạp chồng (overload) 1 phương thứcclass Vidupublic satic void main(String a[])private float cost;public float CalculateSalePrice()return cost*1.5;public float CalculateSalePrice(double heso)return cost*(1+heso);Ở đây có 2 phương thức trùng tên CalculateSalePrice nhưng phương thức thứ 2 khác thamsố, gọi là nạp chồng* nạp chồng (overload) và ghi đè (override)Những phương thức được nạp chồng là những phương thức trong cùng một lớp, có cùngmột tên nhưng danh sách đối số khác nhauPhương thức được ghi đè là phương thức có mặt ở lớp cha, được xác định là phương thứcchung cho các lớp con, rồi xuất hiện ở các lớp conNạp chồng là một hình thức đa hình (polymorphism) trong quá trình biên dịch (compile)còn ghi đè là trong quá trình thực thi (runtime)Bài 6 – Các kiểu dữ liệu nguyên thủy và phép toán  !”#$ % &’%()$”*+,$-.(.* ,/0(01 &$2)$3 ”4,$-.55.”6 $$5,15”67 #,$-.5889:.”6;”<+=.5889>.”6?@+.58AB8.”6CD”#>E:*%F1:GE%#,1H#,1I J”*”KLMNN:”K,1L EO41% P.Q.MNN”K  %RS*%F@.Q.J”*)()+T ”*,/GEUVW$-U!XYPZVA[A\]MJX^*X^* _`,>Va% L,VV2 E#b%*c +”#P2VdePeC,1% #eD%VVVJ>* ^*cW/ f,1 gJN^ h %Kif K%:*j1 >KN k*- f:*j1,$-A8NZPZ>+l k*- f:*j1,$-A8lZPAJ>* ^*i4*9PPmnmPnP%f,o”#J>* ^*,/9$4pp%$4qq$4rJX^gg,1X^1 E:S1gg”K”K1”Kgg”K’*  k1^1 4 ,/^** <W/gg”K,1”K<Eh 4^*1%+/ %/ 4^**W/”Kgg,1”K<Eh 4^** %+/ %/ 4^*1JX^*X^1 ESP\X^*s ,$-gP\t1Pg\JP:t1PJ:Ja%<KT(@K * ^*o E%<KTG%*fk E * ^1Gf%*X^gg,1>* ^*+PgPPmmPnnPBài 7 – Mệnh đề ifnếu em đẹp thì tôi sẽ cưa em không thì tôi cưa đứa khácIF em đẹp THEN tôi sẽ cưa em ELSE tôi cưa đứa khácIF(em đẹp) tôi sẽ cưa em;ELSE tôi cưa đứa khác;Cú pháp (syntax) của mệnh đề IF làif(mệnh đề) lệnh 1;else lệnh 2;Nếu mệnh đề đúng thì thực hiện lệnh 1;Không thì thực hiện lệnh 2;Ví dụif(a>b) System.out.println(“So lon nhat la “+a);else System.out.println(“So lon nhat la “+b);*Ta xây dựng một bài toán làm tròn sốNhập vào một số bất kì. Nếu phần thập phân số này >=0.5, làm tròn tăng lên một đơn vị,ngược lại giảm đi một đơn vị.import java.io.*;public class Hello {public static void main(String[] args) throws Exception {BufferedReader in = new BufferedReader(newInputStreamReader(System.in));System.out.print(“Nhap a: “);float a = Float.parseFloat(in.readLine());float ketqua=a%1;if(ketqua>=0.5) a=a-ketqua+1;else a=a-ketqua;System.out.println(“Ket qua bai toan la: ” + a);* Phép điều kiện ? và phép chọn :- Giả sử có mệnh đề ifif(a>b) a=2;else a=0;Phép điều kiện biểu diễn như sau a=a>b?2:0 nghĩa là nếu chân trị của a>b là đúng thì a=2nếu là sai thì a=0* Sau khi học xong if, bạn có rất nhiều bài tập để mà … làm, cổ điển nhất vẫn là giảiphương trình bậc một và hai, ngoài ra còn nhiều bài tập khác nữa. Ở đây chỉ có giảiphương trình bậc một. Bạn nên tìm nhiều bài tập để tự làm trước khi tiếp tục phần kế.Ví dụ: phương trình bậc 1import java.io.*;public class Hello {public static void main(String[] args) throws Exception {BufferedReader in = new BufferedReader(newInputStreamReader(System.in));System.out.println(“Giai phuong trinh bac nhat dangax+b=0”);System.out.print(“Nhap he so a: “);float a = Float.parseFloat(in.readLine());System.out.print(“Nhap he so b: “);float b = Float.parseFloat(in.readLine());if(a==0) {if(b==0) System.out.println(“Phuong trinh vo songhiem”);if(b!=0) System.out.println(“Phuong trinh vodinh”);else System.out.println(“Phuong trinh mot nghiem x=” +-b/a);Bài 8 – switchBạn đã học xong if. Bạn muốn dùng vòng lặp if để đánh giá điểm số nhập vào. Bạn sẽ viếtchương trình sau đâyimport java.io.*;public class Hello {public static void main(String[] args) throws Exception {BufferedReader in = new BufferedReader(newInputStreamReader(System.in));System.out.print(“Nhap diem so: “);int diem = Integer.parseInt(in.readLine());if(diem<=2) System.out.println(“Yeu”);if((diem>2) && (diem<=3)) System.out.println(“Trungbinh”);if((diem>3) && (diem<=4)) System.out.println(“Kha”);if((diem>4) && (diem<5)) System.out.println(“Gioi”);if(diem==5) System.out.println(“Xuat sac”);Thay vì lặp lại những câu if ấy, bạn nên dùng switchimport java.io.*;public class Hello {public static void main(String[] args) throws Exception {BufferedReader in = new BufferedReader(newInputStreamReader(System.in));System.out.print(“Nhap diem so: “);int diem = Integer.parseInt(in.readLine());switch(diem)case 0:case 1:case 2:System.out.println(“Yeu”);break;case 3:System.out.println(“Trung binh”);break;case 4:case 5:System.out.println(“Gioi”);break;default:System.out.println(“Vao sai”);*break với switch: break sẽ thoát ngay ra khỏi khối lệnh trong thân của switchBài 9 – String* ,/>’%1/ _`,V’%+T ”*+’%P0(#0M>:’%”)g’#VV%0u%0gM`, Efv ” sO41,1’%Vwb1!”#o E 1’%xy,300g>* #% ’%J”%’%AP0(#0M’%:PAV”%8[MNN”z@G$s8s 1.(.[$s 10(#0J#PAV#MNNs 1”)\J %Q% PAV %Q[MNNs 1”)..{|1#<$s%’% * $%’%+T *G8J#i%e# & E &$ Ib##i%f,o”#”#”PV#iM’%IO44Ib+HPPJ %#aP:V %#aAMn8:nAm8:mAP8:PA’*O:,1A1*sO$@ _&,$-0 0n0}”#0J>%Q%%~ &%f$%•€ PAV>%Q%%MJ#e•H’%AP0(#‚,#%”0M’%:P00MPAV#e•H:MNNh”)[{|1#%f,o,F%$ _ &:% &AKI<h%f,oAJ>G’%%O4>GO4%’%*61b00g++T S<fb * #+=sV>* #1)%EL,V% *  9#’%Y##%ƒ„w”#’%P0:Z80MPY##%V%#YMNNh”):Z8a+=,/ * #9#V%#9#’%V%#’%„V%#„VVVBài 10 – vòng lặp forfor(int i=0;i* #%”11)R: L,VVW# %,1L,VV‚#%”*W# %,P#dW# %M•…O4 W# % >#)%E%#L,ƒ+Œ1&@j _W# %of1+Tf E#dY##%+,1”KVa+=,/9#ƒ„VVVP>#V%#Y00MHrP8,V‚###dY##%Md#rP8MY% * @j _W# %H%P8Mm,V}#Mgg’#VV%,V###QM{+W# %,of 6* +,o‚#%f‚#%#P,V###M•+,… Ef#‚#% ^IW# %,6ej$I-KW# %,Y% * @j _‚#%d##V2%#‚##’#VV%#V#e‚##MBài 16 – Lớp nội (lớp nằm trong lớp khác)public class TestProgramstatic int currentCount;static class Appleint weight;public Apple(int weight)this.weight=weight;currentCount++;public int Weight()return weight;public static void main(String args[])Apple a=new Apple(12);//khoi tao 1 quả tao nang 12kgSystem.out.print(a.Weight());Ở đây ta thấy lớp nội Apple trong lớp TestProgram, khi biên dịch Java sẽ làm xuất hiện 2file là TestProgram.class và TestProgram$Apple.class. Ưu điểm khi sử dụng lớp nội là:- thể hiện tính đóng gói cao- các lớp nội có thể truy xuất trực tiếp các biến của lớp chaLưu ý là lớp nội khác với các lớp mà nằm chung một file, ví dụ như tập tin MainClass.javadưới đâypublic class MainClassclass SubclassKhi biên dịch nó sẽ tạo ra 2 file là MainClass.class và Subclass.classBài 17 – Tạo tập tin jar tự chạyufj +=%< _”S E,1U#V %EU# +=%< $12X%V  ‡SV9SŽSU#1HVH E+2>2X%9z” f $e* +Ks 1f E fe•I<%< SL%I+T V’E”S,1l`QWQ•(•2‚l5″5 ^ f * …V _s-,1 fHVH,1E% SL%V#e#,/•4+L% H,HVH2X%%VL%JV a+=K”S+:+- %A,1%:,IU#`Q‘<”S D’L% H,HVH2X%%VL%JV %A%:a%<L%hSU#2X%%VL%* b”S E S+T Ifb4L,fjI EYw‚i#  _”SCHƯƠNG 2 – JAVA VÀ LẬP TRÌNH GIAO DIỆN BẰNG SWINGĐã đến lúc bạn nên sử dụng một IDE để công việc của mình nhanh chóng và dễ dàng hơn.Applet đã trở thành đồ cổ, chúng ta nhảy luôn sang AWT – SwingBài 1 – Mở đầu về SwingChương trình này sẽ tạo một JFrame đơn giản nhấtimport javax.swing.JFrame;class HelloWorldSwingpublic static void main(String[] a)JFrame frame=new JFrame(“Main Frame”);//Main Frame la tencai cua soframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//ham dongcua so laiJLabel label=new JLabel(“Hello Everybody, label containcontext”);//mot doi tuong do hoaframe.getContentPane().add(label);//dua doi tuong do hoavao trong frameframe.pack();//”dong goi” lai toan bo trinh do hoaframe.setVisible(true);//hien thi trinh do hoa ra manhinhĐây là một Frame đơn giản khác, nhưng có thể dùng dễ dàng cho việc mở rộng chươngtrìnhimport javax.swing.JFrame;import java.awt.*;class Execute extends JFrameContainer container = getContentPane();public Execute(String title)super(title); //tuong duong JFrame(title)Label label=new Label(“Hello Everybody, label containcontext”);container.add(label);public static void main(String a[])Execute exe = new Execute(“Frame”);exe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);exe.pack();exe.setVisible(true);Hỗ trợ tiếng ViệtGiả sử bạn muốn nút bấm của bạn có dòng “Việt Nam” và bạn không biết in như thế nào,chương trình sau sẽ giúp bạnJButton b=new JButton(“Vi\u1EC7t Nam”);\u1EC7 là mã Unicode của kí tự ệ mà Java hỗ trợ. Tất cả kí tự Việt đều được hỗ trợ trongLatin và Latin ExtendLưu ý là chỉ có javax.swing mới hỗ trợ, java.awt không hỗ trợBài 2 – Cài đặt bộ nghe và sự kiện cho các đối tượng đồ họaCác đối tượng đồ họa sở dĩ có thể hoạt động được là nhờ có các bộ nghe “nghe” các hànhđộng mà người dùng tương tác với chuột hay bàn phím, và từ đó cho ra các sự kiện tươngứng.Trong ví dụ dưới đây ta có class EventQuit là một bộ nghe, bộ nghe này thực hiện phươngthức actionPerformed chính là chứa những sự kiện của bộ nghe đó. Đối tượng eventQuit làmột instance của class EventQuit. Để cài đặt bộ nghe này cho đối tượng đồ họa button tadùng phương thức addActionListener.import javax.swing.JFrame;import java.awt.*;import java.awt.event.*;class Core extends JFrameContainer container = getContentPane();public Core(String title)super(title);Button button = new Button(“My button”);EventQuit eventQuit=new EventQuit();button.addActionListener(eventQuit);container.add(button);public static void main(String a[])Core exe = new Core(“Frame”);exe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);exe.pack();exe.setVisible(true);class EventQuit implements ActionListenerpublic void actionPerformed(ActionEvent e)System.exit(0);Bây giờ, nếu ta muốn rút gọn, cài đặt bộ nghe và hành động trực tiếp, ta làm như sauimport javax.swing.JFrame;import java.awt.*;import java.awt.event.*;class Corepublic static void main(String args[])JFrame frame = new JFrame(“My frame”);final JButton button = new JButton(“My button”);button.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)if(e.getSource()==button)System.exit(0); //nếu event này có source do button sinh ra});frame.add(button);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.pack();frame.setVisible(true);Bài 3 – setLayout(null) đi đôi với setBoundssetLayout mạnh nhất trong Swing là setLayout(null) cho đối tượng add, còn đối với đốitượng bị add thì setBounds, cú pháp setBounds(x,y,width,height)Trên monitor, Java tính điểm có tọa độ (0,0) là điểm trái trên cùng. Sau đó trục hoành (x)là chiều ngang monitor từ trái sang phải và trục tung (y) là chiều dọc monitor từ trên xuốngdướiPhương thức này sẽ tạo ra một hình chữ nhật ảo bao quanh đối tượng bị add, hình chữ nhậtnày có tọa độ góc đầu tiên là (x,y) và dài width cao height. Ví dụ như bài sau:import javax.swing.JFrame;import java.awt.*;class Corepublic static void main(String args[])JFrame frame = new JFrame(“My frame”);frame.setLayout(null);JButton b1 = new JButton(“Button 1”);b1.setBounds(0,0,100,25);frame.add(b1);JButton b2 = new JButton(“Button 2”);b2.setBounds(100,0,100,25);frame.add(b2);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);Như vậy là chúng ta đã setLayout(null) cho frame và lần lượt setBounds (kích thước cũngnhư vị trí) cho 2 button. Vậy để set kích thước cũng như vị trí cho chính frame thì dùng 2phương thức sau:import javax.swing.JFrame;import java.awt.*;class Corepublic static void main(String args[])JFrame frame = new JFrame(“My frame”);frame.setLayout(null);JButton b1 = new JButton(“Button 1”);b1.setBounds(0,0,100,25);frame.add(b1);JButton b2 = new JButton(“Button 2”);b2.setBounds(100,0,100,25);frame.add(b2);frame.setLocation(200,100);frame.setSize(200,60);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);Bài này y chang bài trên, có khác là giờ đây vị trí điểm đầu của frame đã được xác địnhbằng setLocation, Nếu không setLocation, mặc định là (0,0) còn kích thước được xác địnhbằng setSize. Lưu ý là 200=chiều dài 2 cái button cộng lại còn 60=chiều rộng button +chiều rộng thanh ban đầu (=35).Bài 4 – setLayout không phụ thuộc phân giải màn hìnhVới các ứng dụng nhỏ thì chưa cần quan tâm lắm. Với các ứng dụng trung bình và lớn thìứng dụng “co giãn” tùy theo độ phân giải sẽ là lợi thế lớn. Ta có thể lấy độ phân giải hiệnhành và tùy biến ứng dụng như sau:import javax.swing.JFrame;import java.awt.*;public class Corepublic static void main(String[] args)Toolkit kit = Toolkit.getDefaultToolkit();Dimension screenSize = kit.getScreenSize();int screenWidth = screenSize.width;int screenHeight = screenSize.height;JFrame frame = new JFrame(“My frame”);frame.setSize(screenWidth,screenHeight);frame.setResizable(false);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);Để người dùng không thay đổi được size của mình, dùng frame.setResizable(false)Bài 5 – Các đối tượng đồ họa cơ bản của JavaJ99”P#d90•0M”M3 #d90•0M9j-Q ƒ##%#4,1%o1Jƒ”#ƒ”#”#P#dƒ”#0a#H,##%#0Mƒ”#1ŽJX#X##P#dX#MX#1 sVBài 6 – CheckboxCheckbox dùng để chuyển đổi trạng thái (state) giữa yes/no hay true/false. Khi state là truethì ô đã được đánh dấu. Có 3 instructor thường dùng là:Checkbox() Checkbox(String label) Checkbox(String label,boolean state) với label hiển thịnhãn còn state là true/falseĐể xác lập state cho một Checkbox ta dùng phương thức setState(true)Để lấy state hiện hành của một Checkbox ta dùng phương thức getState()Để xử lí tình huống của Checkbox khi nó thay đổi trạng thái, ta phải cho nó implementsgiao diện ItemListener, và bên trong nó có phương thức itemStateChanged(ItemEvent e).Còn để Checkbox thực hiện những hành động của lớp ấy thì ta phải dùng phương thứcaddItemListener.import javax.swing.JFrame;import java.awt.*;import java.awt.event.*;class Corepublic static void main(String args[])JFrame frame = new JFrame(“My frame”);Checkbox checkbox=new Checkbox(“Documents”,false);checkbox.addItemListener(new ItemListener()public void itemStateChanged(ItemEvent e)System.out.println(“Changed”);});frame.add(checkbox);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.pack();frame.setVisible(true);Ở ví dụ này thì mỗi lần bạn thay đổi trạng thái Checkbox, màn hình Console sẽ in ra câu”Changed” Bây giờ nếu bạn muốn màn hình in ra chỉ khi nào nó được chọn mà thôi, thìsửa lại phương thức itemStateChanged như sauif(e.getStateChange()==ItemEvent.SELECTED) System.out.println(“Changed”);SELECTED và DESELECTED là 2 hằng số biển diễn trạng thái true hay false củaCheckboxBài 7 – Checkbox nhiều tùy chọn (CheckboxGroup)Đầu tiên, hãy tạo một nhóm Checkbox như sau CheckboxGroup g=new CheckboxGroup();Sau đó đưa các Checkbox muốn đưa vào nhóm Checkbox đó như sauCheckbox c1=new Checkbox(“Option 1”,g,true);Checkbox c2=new Checkbox(“Option 2”,g,false);Checkbox c2=new Checkbox(“Option 2”,g,false);Cả 3 cái cùng mang giá trị false cũng được, nhưng nếu là true thì chỉ được một cái trueBài tập sau sẽ tạo một CheckboxGroup có 3 Checkbox. Để listener biết là Checkbox nàođược chọn, ta dùng phương thức getItem (trả về Object) Lưu ý là để cả 3 Checkbox cùnghiển thị trên frame, ta dùng Panelimport javax.swing.JFrame;import java.awt.*;import java.awt.event.*;class Corepublic static void main(String args[])JFrame frame = new JFrame(“My frame”);CheckboxGroup g=new CheckboxGroup();Checkbox c1=new Checkbox(“Option 1”,g,true);Checkbox c2=new Checkbox(“Option 2”,g,false);Checkbox c3=new Checkbox(“Option 3”,g,false);MyItemListener listener = new MyItemListener();c1.addItemListener(listener);c2.addItemListener(listener);c3.addItemListener(listener);Panel panel=new Panel();frame.add(panel);panel.add(c1);panel.add(c2);panel.add(c3);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.pack();frame.setVisible(true);class MyItemListener implements ItemListenerpublic void itemStateChanged(ItemEvent e)if(e.getStateChange()==ItemEvent.SELECTED)Object temp=e.getItem();String s=(String)temp;System.out.println(s);Lưu ý (String)temp thực ra là lấy cái label của Object temp. 2 lệnh có thể thay thế bằng 1lệnh String s=(String)e.getItem();Bài 8 – ChoiceChoice myChoice = new Choice();sau đó đưa mục chọn vào Choice như saumyChoice.addItem(“Red”);myChoice.addItem(“Green”);myChoice.addItem(“Blue”);Khi đó 3 mục chọn được đánh số lần lượt là 0,1,2 (đặt là i: thứ tự mục chọn)Để bỏ mục chọn nào ra khỏi Choice, ta dùng myChoice.remove(i) với i là thứ tự mục chọnĐể bỏ tất cả mục chọn khỏi Choice, ta dùng myChoice.removeAll()Để chọn mục chọn nào trong Choice, ta dùng muChoice.select(i)Lưu ý là ta có thể dùng số thứ tự hoặc nhãn đều được, ví dụ myChoice.remove(“Blue”) haymyChoice.remove(2) đều được. Và nếu có 10 mục chọn có nhãn là “Blue” thìmyChoice.remove(“Blue”) chỉ xóa mục chọn đầu tiên nó tìm thấyimport javax.swing.JFrame;import java.awt.*;import java.awt.event.*;class Corepublic static void main(String args[])JFrame frame = new JFrame(“My frame”);Choice myChoice = new Choice();myChoice.addItem(“Red”);myChoice.addItem(“Green”);myChoice.addItem(“Blue”);myChoice.addItemListener(new ItemListener()public void itemStateChanged(ItemEvent e)if(e.getStateChange()==ItemEvent.SELECTED)String s=(String)e.getItem();System.out.println(s);});frame.add(myChoice);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.pack();frame.setVisible(true);Bài 9 – ListW/># ”e k E cO:%S*%#NH# _+TVW/># ”eu%,1> # k E% * +TVW/ƒ E c,1+T… $ cKV23 F _ƒ1 kF[@jV>* +=s RSƒhSƒ&@ c k c+T 1=cƒhS* &@ c&@ c kc+T 1+hF1 sIf1[+3 Fƒ”#2#  *%+1&@ c+T  co@j† K2#1%# c•+,…ƒB,1ƒBH#1+FB1† ,1&@ c k c+T 1{@j,1ƒƒƒP#dƒZ%#MƒV0X 0MƒV0>55>gg0MƒV0W90MƒV0`,0M>* @j D+T *sG8V{@j,1,F%$1+,1 k$ ,$-ƒV0Q#”#%08M{K@jS,F%$1b+=sƒV%# #Y#0W9V•‚a0:MNNW9”F”)W9V•‚a{eE@j1b+=s %#,#ƒV%#,#ZMƒV%#,#0`,0Mo+T VW1K EA8-  c EŽ10`,0<ƒV%#,#0`,0 keE@j@E<{eE fbƒV%#,#QM{ c@j,1”“ c@jb## ,1### Bài 10 – Làm việc với List* Với List đơn chọnĐể biết được phần tử nào đã được chọn, ta dùng 2 phương thức int getSelectedIndex() và