Mặc định mỗi một Project, Eclipse thiết lập mặc định “Build Automatically”, Nếu trong có trình biên dịch mà xuất hiện những lỗi mà chúng ta không hiểu biết nguyên nhân vì sao thì ta có t
Trang 1Khối: Đại Học Và Cao Đẳng
Năm 2013
Hướng dẫn:
Bài tập thực hành được chia theo Module
Mỗi Module được thiết kế cho thời lượng là 312 tiết thực hành tại lớp với sự hướng dẫn của giảng viên
Tùy theo số tiết phân bổ, mỗi tuần học có thể thực hiện nhiều Module
Sinh viên phải làm tất cả các bài tập trong các Module ở tuần tương ứng Những sinh viên chưa hòan tất phần bài tập tại lớp có trách nhiệm tự làm tiếp tục ở nhà
Các bài có dấu (*) là các bài tập nâng cao dành cho sinh viên khá giỏi
Trang 2MỤC LỤC
Module 1: Program and Statement 3
Module 2: Objects and Primitive data 22
Module 3: Writing Class 29
Module 4: Enhancing Class 38
Module 5: Array and Collections 43
Module 6: Inheritance 48
Module 7: Exception – IO Stream 51
Module 8: Graphic User Interface 54
Trang 3Module 1: Program and Statement
Nội dung kiến thức thực hành:
+ Sử dụng JDK để biên dịch và thực thi chương trình
+ Sử dụng Eclipse để soạn thảo, biên dịch và thực thi chương trình
+ Khai báo và sử dụng biến, đối tượng
+ Sử dụng các cấu trúc điều khiển
+ Nhận dữ liệu từ đối số hàm main
Để biên dịch được các source code Java, máy tính của chúng ta phải có máy Ảo Java
Để có được máy Ảo Java các bạn vào link bên dưới để download bộ JDK
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Sau khi click vào đường link bên trên, danh mục JAVA Kit sẽ hiển thị như hình bên dưới:
Trang 4chọn JDK để Download, sau khi click chọn Download thì một màn hình mới sẽ được hiển thị ra, trong màn hình mới này tùy vào cấu hình của máy tính mà chúng ta chọn tập tin Download cho hợp lý
Giả sử rằng máy tính của bạn 32bits, bạn sẽ chọn Windows x86 để load Sau khi load và cài đặt thành công bạn vào Control Panel để kiểm tra xem máy ảo Java đã được cài đặt vào máy hay chưa Nếu có biểu tượng Java như hình bên dưới thì coi như bạn đã cài đặt thành công:
Trang 51 Bấm chuột phải vào biểu tượng Computer/ chọn Properties
2 Một cửa sổ mới hiện lên, chúng ta chọn Advanced System Settings
Trang 63 Cửa sổ System Properties sẽ hiển thị ra, chúng ta vào tab Advanced, click chọn button Environment Variables…Cửa sổ Environment variables sẽ hiển thị như hình bên dưới:
4 Trong mục System variables, click chọn button New
Mục Variable name, chúng ta nhập vào biến JAVA_HOME
Mục Variable value, chúng ta copy đường dẫn cài đặt JDK vào đây, trong ví dụ này thì JDK
được cài đặt như hình minh họa Tức là nếu máy của bạn cài JDK ở đâu thì copy paste đường dẫn đó vào mục này
Trang 7Sau khi chọn OK, bạn quan sát trong vùng System Variables, biến JAVA_HOME và giá trị của
nó sẽ xuất hiện như hình minh họa bên dưới:
Trang 85 Bước tiếp theo, các bạn tìm tới biến Path trong mục System variables, click chọn Edit:
Trong mục Variable value, các bạn di chuyển tới cuối, nhập vào các giá trị như hình minh họa :
;%JAVA_HOME%\bin;.;
6 Kiểm tra lại cấu hình có chính xác hay không:
Để kiểm tra xem máy tính của bạn đang cài JDK version bao nhiêu, vào Start/ Run Hoặc gõ tổ
hợp phím Windows+R để hiển thị cửa sổ Run, trong cửa sổ này các bạn gõ vào lệnh cmd rồi
nhấn phím Enter
Trang 9Gõ java –version để kiểm tra JDK version
Gõ javac –version để kiểm tra javac version
2 Chọn menu File Save As và đánh tên file ‘Welcome.java’ (giống tên của class)
3 Chọn Start Run và đánh lệnh ‘cmd’ vào trong hộp thoại Run
4 Click vào button OK để cửa sổ command prompt xuất hiện Thay đổi đường dẫn thư mục
lưu file trong bước 3
5 Biên dịch chương trình sử dụng lệnh ‘javac’
6 Chạy chương trình sử dụng ‘java’
Trang 10Yêu cầu:
1.Khởi động Eclipse
Sau khi download và giải nén, các bạn khởi động Eclipse sẽ có giao diện như hình bên dưới:
Để thiết lập Perspective: Vào menu Window / Open Perspective / chọn Other…
Trong cửa sổ Open Perspective các bạn chọn Java sau đó nhấn nút OK
- Cách tạo Java Project:
Trang 11-Vào menu File / New / Java Project
Trong mục Project name của cửa sổ New Java Project: Bạn nhập tên project vào mục này, sau đó nhấn Finish
Bây giờ ta tiến hành tạo 1 class tên là HelloTeo113 Các bạn bấm chuột phải vào Project / New/ chọn Class (xem hình minh họa bên dưới)
Trang 12Cửa sổ New Java Class sẽ xuất hiện như bên dưới:
Nhấn Finish để tạo Class
Các bạn quan sát trong hàm main, ở đây Ta viết dòng lệnh:
System.out.println("HI I'm Teo 113");
Hàm này có tác dụng xuất dữ liệu ra màn hình trên những dòng khác nhau
Trang 13Để biên dịch và thực thi chương trình, ta vào menu Run/Run (hoặc nhấn tổ hợp phím Ctrl+ F11)
Sau khi chọn Run, các bạn quan sát cửa sổ Console ở bên dưới, kết quả sẽ được hiển thị ra như hình minh họa
- Chú ý: Nếu như trong Project của bạn có chứa Font chữ tiếng việt thì nhớ cấu hình dạng UTF-8
Trang 14Từ menu Project/ chọn Properties (xem hình minh họa bên trên) Sau khi chọn Properties thì cửa
sổ Properties for test sẽ hiển thị ra (ở đây test là tên Project) Các bạn chọn Resource/ chọn
UTF-8 như hình bên dưới, sau đó chọn OK để thiết lập cấu hình
Mặc định mỗi một Project, Eclipse thiết lập mặc định “Build Automatically”, Nếu trong có trình biên dịch mà xuất hiện những lỗi mà chúng ta không hiểu biết nguyên nhân vì sao thì ta có thể
vào menu Project/ Clean
Cửa sổ Clean sẽ xuất hiện như hình bên dưới, nếu muốn clean toàn bộ Project thì bạn chọn
“Clean all projects”, còn nếu muốn chỉ clean những project riêng lẻ thì bạn chọn “clean projects selected below” Nhấn OK để tiến hành Clean
Trang 15Các bạn để ý rằng, nếu như muốn tự mình Build Project thì hãy unchecked “Build
Automatically” Lúc này các mục Build All, Build Project…sẽ được hiển thị cho phép chúng ta chọn lựa chúng
Một số editing template hay dùng:
Gõ sysout sau đó nhấn Ctrl-Spacebar sẽ cho System.out.println();
Gõ main sau đó nhấn Ctrl-Spacebar sẽ cho public static void main(String[] args) {}
….Để tìm hiểu thêm, vào menu Window->Reference
Trang 16Các phím tắt hay dùng: Trong Eclipse, vào menu Help->Key Assitst hoặc nhấn tổ hợp Ctrl-Shift-L để hiển thị
1 Thực thi chương trình:
Nhấn chuộ phải lên lớp cần chạy, chọn menu Run As-> Java Application
2 Mở Project trong Eclipse
Eclipse không hỗ trợ mở project trực tiếp nên bạn không có kiểu “double-click-for –open” thường thấy, mà bạn phải import project vào workspace như sau:
Vào menu File->Import rồi chọn như hình
Trang 17Nhấn Next Sau đó nhấn nút Browse để tìm đến thư mục chứa project
Chọn Project cần import rồi nhấn Finish
3 Export file jar tự chạy(executable jar file) trong eclipse
Nhấn chuột phải lên Project cần export, chọn Export
Trang 18Chọn Runnable JAR file như hình Nhấn Next
Chọn Lauch configuration Chọn thư mục chứa cũng như tên file jar Nhấn Finish
Thực thi jar file dưới dạng command-line:
Nếu Project của bạn ở cơ chế GUI thì bạn có thể mở file jar của bạn bằng Java Plaform
SE library như hình
Hướng dẫn:
Trang 19public class MathOps {
//method to print a string and an int
static void printInt(String s, int i) {
System.out.println(s + " = " + i);
}
//method to print a string and a float
static void printFloat(String s, float f) {
System.out.println(s + " = " + f);
}
public static void main(String[] args) {
Random random = new Random();
// Floating-point number tetts
float u, v, w; // also applies to doubles
Trang 20Bài tập 6:
Mục đích:
- Thao tác với toán tử tự động tăng giảm
Yêu cầu:
public class AutoInc_DecOps {
public static void main(String[] args) {
int i = 1;
System.out.println("i : " + i);
System.out.println("++i : " + ++i); // Pre-increment
System.out.println("i++ : " + i++); // Post-increment
System.out.println("i : " + i);
System.out.println(" i : " + i); // Pre-decrement
System.out.println("i : " + i ); // Post-decrement
public class Rel_LogOps {
public static void main(String[] args) {
Random random = new Random();
Trang 21c) Viết chương trình xuất ra tổng các số là bội số của 7 (từ 1 đến 100)
d) Viết chương trình in ra tổng 1+2+3….+n với n được nhập từ tham số command line
e) Viết chương trình in ra tổng 1+3+5….+n nếu n là số chẳn, 2+4+6+….n nếu n là số lẻ
Giá trị n được nhập vào từ tham số command line
f) Viết chương trình in ra giá trị lớn nhất và nhỏ nhất trong một dãy các giá trị user đã nhập vào từ tham số command line
g) Viết chương trình giải phương trình bậc 1 với hệ số a, b được nhập vào bởi user từ tham
số command line
h) Viết chương trình đọc một giá trị nguyên từ bàn phím và in ra số đó là số chẵn, lẻ hoặc zero
i) Viết chương trình in ra bội số của 3 từ 300 đến 3
j) Viết chương trình in ra số lần kí tự „a‟ xuất hiện trong một chuỗi
k) Vẽ các hình bên dưới:
Hướng dẫn:
Trang 22Module 2: Objects and Primitive data
Nội dung kiến thức thực hành:
HD: Dùng lớp DecialFormat để định dạng kết quả với 4 chữ số thập phân:
DecialFormat df = new DecialFormat ("0.####");
số a, b, c có lập thành một tam giác không (a, b, c lập thành tam giác khi tổng 2 số bất kỳ
luôn lớn hơn số còn lại)
Hướng dẫn:
Trang 23Viết chương trình cho nhập một chuỗi và đếm số khoảng trắng có trong chuỗi đó
HD: dùng hàm isSpace(char) của lớp Character để kiểm tra khoảng trắng
Trang 25(i) Viết một hàm có tên square, hàm có 1 tham số x kiểu số thực Hàm này tính toán và trả về bình phương của x
(ii) Đưa hàm trên vào một chương trình và nó được gọi thực hiện bởi hàm main Test hàm vừa viết bằng cách thực hiện vài lần, mỗi lần với các giá trị truyền khác nhau
Viết hàm alarm in ra các chuỗi “Alarm!”, mỗi chuỗi trên một dòng Hàm alarm có
một tham số kiểu số nguyên biểu thị cho số dòng cần in, nếu số này nhỏ hơn 1 thì in ra câu thông báo lỗi
Test hàm vừa viết bằng cách thực hiện vài lần, mỗi lần với giá trị truyền khác nhau
Hướng dẫn:
Bài tập 14:
Mục đích:
Yêu cầu:
Trang 26Viết hàm sumRange, hàm có hai tham số kiểu số nguyên biểu thị cho khoảng giá trị
Nếu tham số thứ hai nhỏ hơn tham số thứ nhất thì xuất ra một thông báo lỗi và trả ra giá trị 0, ngược lại hàm trả về tổng của các giá trị trong khoảng đó
Test hàm vừa viết bằng cách thực hiện vài lần, mỗi lần với các giá trị truyền khác nhau
Hướng dẫn:
Bài tập 15:
Mục đích:
Yêu cầu:
Viết hàm countA, hàm này nhận một tham số kiểu String và trả về số lần xuất hiện ký tự
„A‟ trong chuỗi đó
Test hàm vừa viết bằng cách thực hiện vài lần, mỗi lần với giá trị truyền khác nhau
(ii) Overload hàm average với ba tham số nguyên, hàm trả về giá trị trung bình của ba số đó
Test các hàm vừa viết bằng cách thực hiện vài lần, mỗi lần với các giá trị truyền khác nhau
Hướng dẫn:
Bài tập 17:
Mục đích:
Yêu cầu:
Viết hàm multiConcat, hàm nhận một tham số kiểu String và một số nguyên n, hàm
trả về một chuỗi mới là chuỗi được ghép từ n lần chuỗi trong tham số Nếu n<2 thì xuất ra chuỗi gốc
Ví dụ gọi hàm multiConcat(“hi”,4) kết quả xuất ra “hihihihi” Test hàm vừa viết
bằng cách thực hiện vài lần, mỗi lần với các giá trị truyền cho hàm khác nhau
Hướng dẫn:
Trang 27- Số Fib thứ k = (số Fib thứ k-1) + (số Fib thứ k-2), tức là 13 =8+5, 21=13+8
- 2 số Fib đầu tiên trong dãy luôn luôn là 1
Hướng dẫn:
Bài tập 19:
Mục đích:
Yêu cầu:
Hãy viết phương thức tên Panlyndrome nhận 1 tham số có kiểu String và trả về true nếu
tham số là chuỗi panlyndrome (chuỗi panlyndrome là chuỗi có chuỗi đảo ngược bằng chính nó,
Viết một hàm đặt tên là NegativeNumberInStrings(String str) Hàm này có đối số
truyền vào là một chuỗi bất kỳ, Hãy viết lệnh để xuất ra các số nguyên âm trong chuỗi
Ví dụ: Nếu nhập vào chuỗi “abc -5 xyz -12 k9l p” thì hàm phải xuất ra được 2 số nguyên âm đó
là -5 và -12
Trang 28Hướng dẫn:
Bài tập 21:
Mục đích:
Yêu cầu:
Viết chương trình chơi game đoán số, mô tả game như sau:
- Khởi tạo ban đầu người chơi có 5 điểm
- Máy tự động Random ngẫu nhiên 1 số từ 0->5 (số này sẽ không xuất ra, chỉ dùng để so
sánh với số số mà người chơi đoán
- Người chơi đoán số, Nếu đoán đúng thì + 1 điểm vào điểm khởi tạo, ngược lại -1 điểm (Chú
ý là có xuất thông báo khi người chơi đoán trúng hay đoán sai)
- Khi người chơi không còn điểm nào thì thông báo Game Over
- Nếu người chơi tích lũy được 10 điểm thì thông báo Congratulations! You Win!
Trang 29Module 3: Writing Class
Nội dung kiến thức thực hành:
Cho lớp Distance như sau:
Tìm hiểu lớp này và giải thích kết quả Nếu chương trình bị lỗi, hãy sửa lỗi
Trang 30// Time.java
import java.text.DecimalFormat;
public class Time {
private int hour; // 0 - 23
private int minute; // 0 - 59
private int second; // 0 - 59
// Time constructor initializes each instance variable to zero Ensures that Time object
// starts in a consistent state
public Time() {
setTime( 0, 0, 0 );
}
// Time constructor: hour supplied, minute and second defaulted to 0
public Time( int h ) {
setTime( h, 0, 0 );
}
// Time constructor: hour and minute supplied, second defaulted to 0
public Time( int h, int m ) {
setTime( h, m, 0 );
}
// Time constructor: hour, minute and second supplied
public Time( int h, int m, int s ) {
setTime( h, m, s );
}
// Time constructor: another Time object supplied
public Time( Time time ) {
setTime( time.hour, time.minute, time.second );
}
// Set a new time value using universal time Perform
// validity checks on data Set invalid values to zero
private void setTime( int h, int m, int s ) {
// convert to String in universal-time format
public String toUniversalString() {
DecimalFormat twoDigits = new DecimalFormat( "00" );
return twoDigits.format( hour ) + ":" + twoDigits.format( minute ) + ":" +
twoDigits.format( second );
}
// convert to String in standard-time format
public String toString() {
DecimalFormat twoDigits = new DecimalFormat( "00" );
return ( (hour == 12 || hour == 0) ? 12 : hour % 12 ) + ":" + twoDigits.format( minute ) +
":" + twoDigits.format( second ) + ( hour < 12 ? " AM" : " PM" );
}
}
Trang 31// TimeTest.java
import javax.swing.*;
public class TimeTest {
// test constructors of class Time2
public static void main( String args[] ) {
public class Date {
private int month; // 1-12
private int day; // 1-31 based on month
private int year; // any year
public Date( int theMonth, int theDay, int theYear ) {
if ( theMonth > 0 && theMonth <= 12 ) // validate month
month = theMonth;
else {
month = 1;
Trang 32System.out.println( "Month " + theMonth + " invalid Set to month 1." );
}
year = theYear; // could validate year
day = checkDay( theDay ); // validate day
System.out.println( "Date object constructor for date " + toString() );
}
private int checkDay( int testDay ) {
int daysPerMonth[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// check if day in range for month
if ( testDay > 0 && testDay <= daysPerMonth[ month ] )
return testDay;
// check for leap year
if ( month == 2 && testDay == 29 && ( year % 400 == 0 ||
( year % 4 == 0 && year % 100 != 0 ) ) )
return testDay;
System.out.println( "Day " + testDay + " invalid Set to day 1." );
return 1; // leave object in consistent state
}
// Create a String of the form month/day/year
public String toDateString() {
return month + "/" + day + "/" + year;
}
}
// Employee.java
public class Employee {
private String firstName;
private String lastName;
private Date birthDate;
private Date hireDate;
// constructor to initialize name, birth date and hire date
// convert Employee to String format
public String toEmployeeString() {
Trang 33return lastName + ", " + firstName + " Hired: " + hireDate.toDateString() + " Birthday: " + birthDate.toDateString();
}
}
//EmployeeTest.java
import javax.swing.JOptionPane;
public class EmployeeTest {
public static void main( String args[] ) {
Date birth = new Date( 7, 24, 1949 );
Date hire = new Date( 3, 12, 1988 );
Employee employee = new Employee( "Bob", "Jones", birth, hire );
JOptionPane.showMessageDialog( null, employee.toEmployeeString(),
"Testing Class Employee", JOptionPane.INFORMATION_MESSAGE );
+ setCanhA(v : int) : void
Trang 34+ getCanhB() : int + setCanhB(v : int) : void + getCanhC() : int
+ setCanhC(v : int) : void + laTamGiac() : boolean + laTamGiac(int, int, int) : boolean + getChuVi() : int
+ getDienTich() : double Trong đó:
ộc tính ma, mb, mc là ba cạnh của tam giác
ởi tạo CHinhTamGiac(int, int, int): yêu cầu kiểm tra:
o nếu giá trị truyền có số âm thì thông báo và gán thuộc tính tương ứng bằng 0;
o nếu 3 giá trị truyền vào không lập thành một hình tam giác thì thông báo "Không phải hình tam giác" và gán 3 thuộc tính bằng 0
HD : ba giá trị lập thành một hình tam giác khi và chỉ khi tổng hai cạnh bất kỳ luôn lớn hơn cạnh còn lại
setCanhA, setCanhB, setCanhC cũng yêu cầu phải kiểm tra giá trị gán có là
số dương và lập thành tam giác hay không, nếu không thì không gán (giữ lại giá trị cũ)
getChuVi(), getDienTich(): tính chu vi và diện tích của tam giác
laTamGiac(): trả về giá trị true khi ba giá trị ma, mb, mc lập thành một hình tam
giác, ngược lại trả về giá trị false
laTamGiac(int, int, int): trả về giá trị true khi ba giá trị a, b, c lập thành một
hình tam giác, ngược lại trả về giá trị false
(ii) Viết hàm main để kiểm tra lớp CHinhTamGiac theo yêu cầu sau:
Cho nhập vào 3 giá trị số nguyên và khởi tạo hình tam giác có các cạnh ứng với 3 giá trị này, nếu 3 giá trị này không lập thành tam giác thì thông báo, ngược lại thì tính và xuất ra chu vi
Trang 35+ getMaNV() : String + setMaNV(ma : String) : void + getSoSP() : int
+ setSoSP(sp : int) : void + coVuotChuan() : boolean + getTongKet() : String + getLuong(): double + XuatTieuDe() : static void
+ toString() : String
rong các hàm khởi tạo và các hàm setSoSP, khi gán giá trị cho thuộc tính soSP thì cần
kiểm tra giá trị đó có phải là số dương không, nếu là số dương thì mới gán giá trị cho thuộc tính, ngược lại thì gán bằng 0
coVuotChuan() : trả về true nếu soSP > 500, ngược lại trả về false
Giải thích: hàm này dùng để kiểm tra xem số lượng sản phẩm của nhân viên có vượt quá số lượng chuẩn hay không
getTongKet() : trả về chữ "Vượt" khi soSP > 500, ngược lại để trống (có thể sử
dụng hàm coVuotChuan() để kiểm tra)
getLuong() : trả về lương của một nhân viên, lương ăn theo sản phẩm với đơn giá cơ
bản cho 1 sản phẩm là 20000, và nếu số sản phẩm của nhân viên vượt chuẩn thì phần vượt chuẩn được tính đơn giá là 30000
XuatTieuDe() : xuất tiêu đề gồm các cột : mã nhân viên, số sản phẩm, lương, tổng
kết
toString() : trả về chuỗi chứa thông tin của nhân viên gồm các cột: Mã nhân viên
(maNV), Số sản phẩm (soSP), Lương và Tổng kết
(ii) Viết hàm main để kiểm tra lớp NhanVien theo yêu cầu sau:
Tạo 2 nhân viên với các thuộc tính cho người dùng nhập vào Xuất ra các thông tin của
(i) Xây dựng lớp CNhanVien, biết:
ần lượt là các thuộc tính họ, tên và số sản phẩm của nhân viên
ết hàm khởi tạo CNhanVien(String, String, int), hàm này sẽ khởi tạo họ, tên, số sản phẩm của nhân viên; hàm phải kiểm tra số sản phẩm là số lớn hơn hoặc bằng 0, nếu là số
âm thì gán giá trị cho mSoSP bằng 0
ết các hàm lấy và gán giá trị cho thuộc tính của lớp (các hàm get/set)
ết hàm getLuong() để tính lương cho nhân viên, lương = số sản phẩm * đơn giá, với đơn giá tùy thuộc vào số sản phẩm như sau:
Trang 36(ii) Viết hàm main sử dụng lớp CNhanVien theo yêu cầu sau:
Cho người dùng nhập vào 2 nhân viên, mỗi nhân viên nhập vào họ, tên, số sản phẩm của
họ Hãy tính và xuất ra lương của từng nhân viên So sánh và xuất ra thông báo nhân viên nào
có số sản phẩm nhiều hơn và nhiều hơn bao nhiêu Dùng 2 cách so sánh: dùng hàm LonHon và không dùng hàm LonHon
Xây dựng lớp SinhVien với các thuộc tính của sinh viên là mã sinh viên, họ tên, điểm lý thuyết,
điểm thực hành Viết hàm main cho phép thực hiện:
(i) Nhập thông tin cho một sinh viên
(ii) Tính điểm trung bình của sinh viên (điểm trung bình = (đlt+dth)/2)
(iii) Xuất thông tin sinh viên và cho biết kết quả học tập của sinh viên (Đậu khi điểm trung bình >=5, ngược lại là Rớt)