You are on page 1of 3

NHẬP DỮ LIỆU TỪ BÀN PHÍM

Nhập tử tế, Nhập ngoài biên (out Lệnh nhập bị trôi, lệnh lạc Nhập cà chớn, không biết xử
đúng yêu of range), ngoài miền trôi lí ra sao
cầu giá trị cần thiết (Skip getting a Không xài if được
Dùng if char/string) (Exception)
App yêu cầu App yêu cầu nhập năm sinh Xảy ra khi nhập kí tự/chuỗi sau Xảy ra khi yêu cầu nhập số nhưng ta
nhập chuỗi từ [1990…2001] khi nhập số (lệnh nhập số trước gõ chuỗi Ahihi
o Ta gõ “Ahihi” o Ta gõ 2000 Enter > ổn lệnh nhập chữ/chuỗi) o Mặc định, JVM phát hiện dữ liệu sai
rồi Enter o Ta gõ 2005 Enter > giá trị Nguyên nhân: lệch, không thể convert “Ahihi” về số
o Ổn, xử lí tiếp không hợp lệ, nằm ngoài nào phù hợp, để đảm bảo App xử lí data
o Lệnh nhập số chỉ dùng đúng phần
không bình biên, ta dùng lệnh an toàn, JVM gửi một “tin
số trong buffer (bộ nhớ đệm nhập
nhắn”/an Exception object
luận if(yob < 1990 || yob xuất), và để lại dấu cách, kí tự
cho App, báo rằng có tình huống “bất
App yêu cầu > 2001) khác, và enter trong buffer (gọi là
thường, cà chớn không như dự kiến –
rác buffer).
nhập số nguyên sout(chửi); gọi chung là Exception” đã xảy ra, và
o Lệnh liền kề nhập kí tự/chuỗi thấy giết luôn App, ngay và luôn (End
o Ta gõ 2000 rồi o Và có thể kết hợp do-while()
bắt nhập lại có “char” trong buffer, hốt luôn Process)
Enter
“rác” này gán vào biến kí tự/chuỗi
o Ổn, chơi tiếp Hoặc App yêu cầu nhập o Và hiện tượng trôi lệnh xảy ra, cảm o Lí do: đưa chuỗi vào số, không thể dùng
chuỗi khác rỗng, theo định giác lệnh nhập kí tự/chuỗi không lệnh if để xử lí được, mà tiếp tục dùng
dạng nào đó chạy, không cho mình gõ nhưng cái sai để làm tiếp thì là sai luôn, giết
thực ra là “tài lanh” hốt rác buffer cho lành
o Ta dùng if()và các hàm liên gán vào o Nếu không muốn bị JVM giết khi có “cà
quan để kiểm tra dữ liệu
nhập vào và thông báo lỗi (và Lập trình C: xóa bộ nhớ đệm
chớn”, hãy ra hiệu với JVM đừng giết
nhập xuất trước lệnh nhập kí App, cứ nhắc App có cà chớn là được,
bắt nhập lại) là ổn
tự/chuỗi %c, %s gửi cho App cái tình hình cà chớn – an
o Nhập cùng data type khác kì Exception object, và để App tự tính
vọng, xài if o fflush(stdin); nếu xài toán, tự xử. JVM sẽ không giết App nữa,
o Đúng định dạng, sai compiler MinGW, Microsoft C nhưng JVM muốn rằng App cần có cơ
value cần -> ngoài Compiler chế cam kết đảm bảo xử lí cà chớn. JVM
biên -> if mà check o fpurge(stdin); nếu xài GCC, muốn thấy App phải nhốt các lệnh có
mà chửi Cygwin Compiler nguy cơ gây cà chớn vào tầm ngắm, vào
tầm kiểm soát, giám sát, ĐÓ LÀ CƠ CHẾ
o __fpurge(stdin); nếu xài
TRY-CATCH
Linux, MacOS
try {
Lập trình Java: xóa bộ nhớ đệm
nhốt lệnh cần giám sát
nhập xuất trước lệnh nhập kí
.nextInt();
tự/chuỗi dùng Scanner
.parseInt(?);
o Tà chiêu Âu Dương Phong
sc.nextLine(); chạy chơi }

o Chánh đạo Quách Tĩnh catch(Exception e) {

Integer. e chính là đối tượng,


tình hình cà chớn mà JVM
parseInt(sc.nextLine()); nắm bắt được gồm chi
class TraiBao, Wrapper tiết nguyên nhân gây ra
class (boxing/unboxing) cà chớn. Hãy ex. chấm để
xem sự vụ diễn ra
thêm các lệnh xử lí hậu
quả ở đây
}

KHI NÀO XÀI TRY-CATCH


 Convert data  Đi vượt quá số phần tử  Kết nối mạng, truyền nhận dữ  I/O nhập xuất với tập tin. Bắt
không thành mảng (out of bound) liệu qua mạng, database ở xa. buộc phải nhốt lệnh vào trong try-
công (chuỗi - Server chết, mạng rớt catch
> số)  Null Pointer – Chưa gán
giá trị cho biến con Sql injection  Còn nhiều tình huống khác nữa…
 Chia cho 0 trỏ/biến object mà bày
đặt đòi chấm
Mà ko chặn
số chia qua if

You might also like