Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
187,5 KB
Nội dung
Bài 1 SƠ LƯỢC VỀ NGÔN NGỮ JAVA - Làm quen với môi trường IDE (Jubuider 9.0). - Cài đặt các chương trình ứng dụng đơn giản về ngôn ngữ java. + Các bài tập về cấu trúc điều khiển. + Các bài tập về ngoại lệ. + Các bài tập về lớp. + Các bài tập về I/O. I. 1. Cấu trúc điều khiển. I.1.1. Bài tập mẫu: // khai báo thư viện nhập xuất dữ liệu. import java.io.*; public class DemSo { private String s; // Xây dựng phương thức nhập chuỗi từ bàn phím public void nhap() { try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Nhap mot chuoi tu ban phim"); s=br.readLine(); }catch(IOException ex) {} } // Xây dựng một hàm có dữ liệu trả về là double để đếm tống các số (0->9) xuất hiện trong chuỗi. public double xuLy() { double dem=0; for(int i=0;i<s.length();i++) { if(kiemTra((int)s.charAt(i))==true) { dem++; } } return dem; } // Xây dựng hàm có giá trị trả về là true và false để kiểm tra giá trị nhập vào có nằm trong khoảng số hay không (ký tự 0->9 trong bảng mã ASCII có giá trị kiểu int là 48 ->57). public boolean kiemTra(int x) { if((x>47)&&(x<58)) return true; else return false; } public void xuLyCT() { int dem0=0; int dem1=0; int dem2=0; int dem3=0; int dem4=0; int dem5=0; int dem6=0; int dem7=0; int dem8=0; int dem9=0; for(int i=0; i<s.length();i++) { char c = s.charAt(i); switch(c) { case '0':dem0++; break; case '1':dem1++; break; case '2':dem2++; break; case '3':dem3++; break; case '4':dem4++; break; case '5':dem5++; break; case '6':dem6++; break; case '7':dem7++; break; case '8':dem8++; break; case '9':dem9++; break; } } System.out.println("So lan xuat hien so 0 co trong chuoi la: \t"+ dem0); System.out.println("So lan xuat hien so 1 co trong chuoi la: \t"+ dem1); System.out.println("So lan xuat hien so 2 co trong chuoi la: \t"+ dem2); System.out.println("So lan xuat hien so 3 co trong chuoi la: \t"+ dem3); System.out.println("So lan xuat hien so 4 co trong chuoi la: \t"+ dem4); System.out.println("So lan xuat hien so 5 co trong chuoi la: \t"+ dem5); System.out.println("So lan xuat hien so 6 co trong chuoi la: \t"+ dem6); System.out.println("So lan xuat hien so 7 co trong chuoi la: \t"+ dem7); System.out.println("So lan xuat hien so 8 co trong chuoi la: \t"+ dem8); System.out.println("So lan xuat hien so 9 co trong chuoi la: \t"+ dem9); } // Xây dựng hàm main để thực thi các phương thức, hàm có trong lớp public static void main(String[]args) throws IOException { // Biến dc thuộc kiểu DemSo để gọi đến các phương thức, thuộc tính có trong lớp. DemSo dc = new DemSo(); dc.nhap(); System.out.println("TONG CAC SO XUAT HIEN TRONG CHUOI LA \t"+ dc.xuLy()); dc.xuLyCT(); } } I.1.2. Bài tập: Câu 1: Tính tổng số chẵn, lẻ. Ví dụ: Khi nhập vào số 6 thì tổng lẻ là 1+3+5=9, Tổng chẵn là 2+ 4+6=12. Câu 2: In ra 15 số Fibonacci đầu tiên ( Công thức của Fibonacci fib(0) = 0;fib(1) = 1; fib(n) = fib(n-2) + fib(n-1); n>=2 ). Câu 3. Nhập vào một số nguyên (n) sau đó in ra các số nguyên tố trong khoảng từ 1=>n. Câu 4: Nhập độ dài 3 cạnh của một tam giác. Thông báo tam giác đó là tam giác đều, vuông cân, cân, hay tam giác thường. Câu 5: Cho một số tự nhiên N bất kỳ được nhập vào từ bàn phím. Tính tổng S = 1+ 1/1+2+ 1/1+2+3….+ 1/(1+2+3. . N); Câu 6: Nhập vào hai chuỗi s1, s2 sau đó đếm số lần chuỗi s2 xuất hiện trong chuỗi s1. Câu 7: Nhập vào ba xâu s1, s2, s3 sau đó thay thế tất cả các vị trí xuất hiện của s2 trong xâu s1 bằng xâu s3. Câu 8: Nhập một xâu s và kiểm tra xâu đó có phải xâu đối xứng không? Câu 9: Nhập vào một xâu ký tự sau đó chuẩn hoá xâu này theo quy tắc sau: - Đầu và cuối xâu không được chứa dấu cách - Giữa các từ không thể có nhiều hơn 1 dấu cách - Đầu các từ trong xâu phải là ký tự hoa - Các ký tự không phải là ký đầu tiên của một từ phải là chữ thường. Câu 10: Hãy nhập mảng một chiều a[] có n phần tử từ bàn phím - Xây dựng phương thức tính tổng của mảng. - Xây dựng phương thức tính tổng các giá trị chẵn có trong mảng. - Xây dựng phương thức đếm số lần xuất hiện của x có trong mảng. - Xây dựng phương thức sắp xếp các phần tử trong mảng thành dãy tăng dần. - Xây dựng phương thức hiện các phần tử của mảng. Câu 11: Hãy nhập mảng 2 chiều a[n][m] có n số hàng, m số cột từ bàn phím. - Xây dựng phương thức tính tổng của mảng. - Xây dựng phương thức tính tổng các hàng, các cột. - Xây dựng phương thức tính tổng đường chéo chính, đường chéo phụ. - Xây dựng phương thức hiện các phần tử mảng theo ma trận. I.2. Xử lý ngoại lệ: I.2. 1 Bài tập mẫu: Tính tổng 2 số a, b được nhập từ bàn phím. Yêu cầu xử lý các ngoại lệ có thể xảy ra. // Triển khai thư viện nhập xuất import java.io.*; // Tạo lớp tính tổng public class TinhTong { public static void main(String[]args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); float a=0, b=0, tong; try { System.out.println(" Ban hay nhap gia tri cua a "); a = Float.parseFloat(br.readLine()); System.out.println(" Ban hay nhap gia tri cua b "); b=Float.parseFloat(br.readLine()); // Bắt ngoại lệ trong quá trình nhập dữ liệu từ bàn phím }catch(IOException ex) // In ra màn hình thông tin bị lỗi trong quá trình nhập { System.out.println( ex.getMessage()); } // Bắt ngoại lệ khi không thể chuyển kiểu chuỗi thành kiểu số catch(NumberFormatException nfe) // In ra màn hình thông tin bị lỗi trong quá trình chuyển kiểu { System.out.println( nfe.getMessage()); } tong =a+b; System.out.println( a + " + "+ b +":= \t"+ tong); } } I.2.2. Bài tập: Câu 1: Viết chương trình cho phép tính giá trị của biểu thức: A = Yêu cầu xử lý các ngoại lệ có thể xảy ra. Câu 2: Viết chương trình cho phép tạo một mảng 2 chiều cỡ mxn với m,n nhập từ bàn phím. Xây dựng phương thức hiện thị dữ liệu trong mảng. Cài đặt các xử lý ngoại lệ cần thiết. I. 3. Hướng đối tượng: I.3.1. Bài tập mẫu: // Khai báo thư viện nhập xuất dữ liệu. import java.io.*; // Khai báo thư viện collection để tập hợp đối tượng (ArrayList, List, Date. . .) import java.util.*; // Xây dựng một lớp SinhVien public class SinhVien { // Khai báo các thuộc tính của lớp (maSV, tenSV). private String maSV; private String tenSV; //biến ds thuộc kiểu dữ liệu ArrayList để tập hợp các đối tượng SinhVien để tạo thành một danh sách (biến ds có thể thêm hoặc xóa một đối tượng trong nó) ArrayList ds = new ArrayList(); // Xây dựng phương thức khởi tạo không có đối số. public SinhVien() { } // Xây dựng phương thức khởi tạo có đối số truyền vào public SinhVien(String maSV, String tenSV) { this.maSV=maSV; this.tenSV=tenSV; } // Xây dựng phương thức để nhập n sinh viên vào trong ds. public void nhap() { try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Nhap so sinh vien"); int n = Integer.parseInt(br.readLine()); for(int i=0;i<n; i++) { System.out.println("Nhap maSV "+ i); maSV=br.readLine(); System.out.println("Nhap tenSV "+ i); tenSV=br.readLine(); SinhVien sv = new SinhVien(maSV,tenSV); ds.add(sv); } }catch(IOException ex) {} catch(NullPointerException npe) {} } // Xây dựng phương thức hiện thông tin của sinh viên có trong ds. public void hien() { System.out.println("STT \t"+ "MA SINH VIEN \t"+ " TEN SINH VIEN \t"); for(int i=0; i<ds.size();i++) { SinhVien sv =(SinhVien)ds.get(i); System.out.println(i+ " \t"+ sv.maSV+ " \t\t "+ sv.tenSV); } } // Xây dựng phương thức tìm một sinh viên có trong danh sách sinh viên hay không public void tim(String s) { boolean kt=false; for(int i=0; i<ds.size(); i++) { SinhVien sv = (SinhVien)ds.get(i); sv.tenSV=sv.tenSV.trim(); String ten=sv.tenSV.substring(sv.tenSV.length()-s.length()); if(s.equals(ten)) { System.out.println("SINH VIEN "+ s + " CO TRONG DANH SACH VA CO MA SO \t"+ sv.maSV); kt=true; } } if(kt==false) { System.out.println("SINH VIEN "+ s + " KHONG CO TRONG DANH SACH"); } } // Xây dựng phương thức main để thực thi các phương thức có trong lớp public static void main(String[]args) { SinhVien sv = new SinhVien(); sv.nhap(); sv.hien(); String s ="Bien"; sv.tim(s); } I.3.2. Bài tập Câu 1 a) Xây dựng lớp Stack để mô phỏng một Stack (giả thiết mỗi phần tử của stack là một số nguyên), bao gồm: - Hàm tạo Stack(int n) để khởi tạo Stack có tối đa n phần tử - Phương thức isEmpty để kiểm tra xem Stack có phần tử nào hay không? - Phương thức isFull để kiểm tra xem Stack đã đầy hay chưa? - Phương thức push để thêm một phần tử vào Stack - Phương thức pop để lấy một phần tử ra khỏi Stack b) Viết một đoạn chương trình để kiểm tra lớp Stack vừa tạo bằng cách: - Tạo ra một Stack có số phần tử tối đa là 5 - Trước khi đưa các phần tử vào Stack, hãy kiểm tra xem Stack có đang rỗng, đầy hay không? - Đưa phần tử 5 vào ngăn xếp, sau đó kiểm tra xem ngăn xếp có đầy, rỗng hay không? - Đưa tiếp các phần tử 1, 6, 8, 9 vào ngăn xếp, sau đó lại kiểm tra lại xem ngăn xếp đầy, rỗng hay không? Câu 2: Sử dụng lớp Stack được viết trong Bài 1 để viết chương trình chuyển một số từ hệ cơ số 10 sang hệ cơ số: 2, 8, 16, một cơ số bất kỳ bằng cách sử dụng phép toán chia liên tiếp. Bài 3: Xây dựng lớp PhanSo để thực hiện các phép toán trên phân số, bao gồm: - Hàm tạo PhanSo() để khởi tạo phân số có tử số bằng 0 và mẫu số bằng 1. - Hàm tạo PhanSo(int ts, int ms) để khởi tạo phân số có tử số bằng ts và mẫu số bằng ms. - Phương thức “cong”, “tru”, “nhan”, “chia” để thực hiện việc cộng , trừ, nhân, chia hai phân số. - Phương thức “nghichDao”, “doiDau”, “toiGian” để thực hiện việc nghịch đảo, đổi dấu và tối giản một phân số. - Phương thức “soSanhBang”, “lonHon”, “nhoHon”… để thực hiện việc so sánh hai phân số. - Phương thức “nhap” dùng để nhập phân số từ bàn phím. I.4. Các bài tập về I/O. I.4.1. Bài tập mẫu: Câu 1: Hãy sao chép file E:\\bien.txt sang D:\\bien.txt. \\ Khai báo thư viện nhập xuất. import java.io.*; // Xây dựng lớp CopyFile public class CopyFile { // Xây dựng phương thức xuLy() để thực hiện đọc và ghi file sử dụng luồng byte là (FileInputStream, FileOuputStream) public static void xuLy() throws IOException { FileInputStream fis; FileOutputStream fos; try { // biến fis sẽ đọc file bien.txt có trong ổ E fis = new FileInputStream("E:\\bien.txt"); // biến fos sẽ tạo ra file bien.txt ở ổ D để lưu dữ liệu đọc được ở file bien.txt ở ổ E. fos = new FileOutputStream("D:\\bien.txt"); int x; // Đọc dữ liệu trong fis cho đến =-1 hay hết file. while ( (x = fis.read()) != -1) { // fos ghi từng byte dữ liệu nhận được vào file bien.txt trong ổ D. fos.write(x); fos.flush(); } System.out.println("Sao chep file thanh cong"); // Đóng luồng fos.close(); fis.close(); }catch(FileNotFoundException fnfe) {} } // Xây dựng phương thức main để gọi đến phương thức sao chép file. public static void main(String[]args) throws IOException { xuLy(); } } Câu 2: Hãy nhập 3 số nguyên từ bàn phím vào trong tệp tin Tong.txt. Đọc 3 số từ tệp tin Tong.txt và tình tổng của 3 số đó rồi ghi kết quả vào dòng tiếp theo trong tệp tin. // Khai báo thư viện nhập xuất import java.io.*; // Xây dựng lớp Tong public class Tong { // Xây dựng phương thức main để thực thi các phương thức trong lớp Tong public static void main(String[]args)throws IOException, FileNotFoundException { tinhTong(); } // Xây dựng phương thức tinhTong() để ghi và đọc dữ liệu public static void tinhTong()throws IOException, FileNotFoundException { \\ Biến pw thuộc kiểu dữ liệu PrintWriter để ghi dữ liệu dùng luồng ký tự. PrintWriter pw = new PrintWriter(new FileOutputStream("D:\\Tong.txt")); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); for (int i = 0; i < 3; i++) { System.out.println("So thu " + i); int n = Integer.parseInt(br.readLine()); pw.print(n); pw.print(" "); pw.flush(); } // Biến dis thuộc kiểu dữ liệu DataInputStream đọc luồng dữ liệu nhị phân (Một số kiểu dữ liệu nguyên thủy như int, float, long . .) DataInputStream dis = new DataInputStream(new FileInputStream( "D:\\dayso2.txt")); char[] c = new char[dis.available()]; int x; int i = 0; int tong = 0; while ( (x = dis.read()) != -1) { c[i] = (char) x; i++; } String s = new String(c); String[] s1 = s.split(" "); for(int j=0;j<s1.length;j++) { tong+=Integer.parseInt(s1[j]); } pw.println(); pw.println(tong); pw.flush(); [...]... System.out.println("TONG "+ c.tong(a)); } catch(IOException ex) {} catch(Exception e) { System.out.print(e); } } } * Biên dịch các file java nguồn.(Ví dụ Tất cả các file đều nằm trong thư mục (E:\\RMI))) + E:\RMI> javac Tong .java + E:\RMI> javac Tongipl .java + E:\RMI> javac Server .java + E:\RMI> javac Client .java * Sinh lớp trung gian STUB và SKETLETON + E:\RMI> rmi Tongipl * Chạy chương trình rmiregistry.exe + E:\RMI> rmiregistry.exe... return tong; } } * Xây dựng chương trình phía Server // Khai báo thư viện cho Server import java. rmi.server.*; import java. rmi.*; public class Server { public static void main (String[] args) { try { // Tạo đối tượng Tongipl thực sự Tongipl t=newTongipl (); // Thông báo sự hiện diện của đối tượng cho máy áo java UnicastRemoteObject.exportObject(t); // Đăng ký đối tượng với bộ quán lý của rmi Naming.bind("rmi://localhost/MyT",t);... - Các hàng tiếp theo mỗi hàng ghi một hàng tương của ma trận + Đọc lại ma trận này từ tệp mt.dat I.5 Các bài tập về luồng (Thread) I.5.1 Bài tập mẫu: II PIPE II.1 .Bài tập mẫu Câu 1: Xây dựng ứng dụng PipedEcho - Sử dụng Pipe làm phương tiện giao tiếp giữa Client và Server - Server là một thread thực thi song song với client - Nhập các ký tự từ bàn phím và gởi cho Server và hiện thị kết quả nhận được... Chuyển dữ liệu nhận về thành kiểu chuỗi String st = new String(packet.getData(),0,packet.getLength()); // Hiện thị chuỗi nhận về từ client và địa chỉ ip của client System.out.println("receive : '" + st + "' from " + ipClient); packet.setLength(buffer.length); } catch (UnknownHostException evt) {evt.printStackTrace();} } } * Trình tự hoạt động của UDPClient import java. io.*; import java. net.*; class UDPClient... socket.close(); } } III.2 Bài tập: Câu 1: a) Chương trình phía máy chủ: - Lắng nghe và chấp nhận kết nối trên cổng 1234 - Khi nhận được một dòng do máy khách gửi đến máy chủ sẽ xử lý như sau: + Nếu dòng nhận được “OP DS1 DS2” (Trong đó “OP” là một phép toán số học có thể là: “+”, “-”, “*”, “/” DS1, DS2 là đối số của phép toán Các thành phần cách nhau bởi một dấu cách) Server sẽ thực hiện phép toán DS1... chuỗi rồi chuyển kiểu thành (double) tính căn bậc 2 rồi gửi trả về cho client - Đóng kết nối b) Chường trình phía máy khách: - Kết nối đến cổng 1111 - Đọc một chuỗi từ bàn phím, gửi chuỗi đến Server và nhận kết quả trả về hiện trên màn hình - Đóng kết nối Câu 5: Viết chương trình chat per to per, cho phép 2 máy tính gửi trực tiếp các thông điệp cho nhau IV PRC và RMI IV.1 Bài tập mẫu: Bài 1: Xây dựng một... "\n"); pw.flush(); pw.close(); br.close(); client.close(); sv.close(); }catch(IOException ex) {} } // Hàm chuyển đổi chuỗi thành chuỗi hoa public static String chuHoa(String s) { s=s.toUpperCase(); return s; } } * Trình tự hoạt động của máy khách (Client) : import java. io.*; import java. net.*; public class TCPClient { public static void main(String[]args) { try { // Client kết nối đến Server có địa chỉ... pw.close(); sk.close(); }catch(IOException ex) {} } } III.1.2 Lập trình với UDP Bài Tập 1 : Viết chương trình kết nối Client – Server Sau đó gửi các 1 thông điệp từ máy khách đến máy chủ Máy chủ hiển thị ra [ IP Address – Port – Thông điệp ] từ máy khách gửi đến? * Trình tự hoạt động của UDPServer import java. io.*; import java. net.*; class UDPServer { public static void main(String[] args) throws Exception... E:\RMI> rmiregistry.exe * Khởi động đối tượng Server (mở một cửa sổ mới của msdos chạy chương trình của Server) + E:\RMI> java Server Kết quả Register Thanh cong * Khởi động đối tượng Client (mở một cửa sổ mới của msdos chạy chương trình của Client) + E:\RMI >java Client Kết quả IV 2 Bài tập: Câu 1: Xây dựng một ứng dụng đảo chuỗi được gọi từ xa Câu 2: Xây dựng một ứng dụng trả ra GetTime(), GetDate của... là ký tự số sẽ gửi trả về cho Client III SOCKET III.1 Bài tập mẫu III.1 1.Lập trình TCP III.1.1.1.Xây dựng chế độ phục vụ tuần tự Câu 1: Viết chương trình theo mô hình Client-Server sử dụng Socket ở chế độ nối kết(TCP) a) Chương trình phía Server - Lắng nghe và chấp nhận kết nối tại cổng 1234 - Khi nhận một chuỗi từ Client sẽ chuyển chuỗi đó thành chữ hoa và gửi kết quả trả lại cho Client - Đóng kết . Bài 1 SƠ LƯỢC VỀ NGÔN NGỮ JAVA - Làm quen với môi trường IDE (Jubuider 9.0). - Cài đặt các chương trình ứng dụng đơn giản về ngôn ngữ java. + Các bài tập về cấu trúc điều khiển. + Các bài. Các bài tập về ngoại lệ. + Các bài tập về lớp. + Các bài tập về I/O. I. 1. Cấu trúc điều khiển. I.1.1. Bài tập mẫu: // khai báo thư viện nhập xuất dữ liệu. import java. io.*; public class DemSo. đối tượng: I.3.1. Bài tập mẫu: // Khai báo thư viện nhập xuất dữ liệu. import java. io.*; // Khai báo thư viện collection để tập hợp đối tượng (ArrayList, List, Date. . .) import java. util.*; //