1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài thực hành Ngôn ngữ Java pdf

26 455 2
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bài Thực Hành Ngôn Ngữ Java
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Ngôn Ngữ Lập Trình
Thể loại Bài Thực Hành
Định dạng
Số trang 26
Dung lượng 187,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 hiện các phần tử của mảng.. //biến ds thuộc kiểu dữ liệu A

Trang 1

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");

Trang 2

case '0':dem0++; break;

case '1':dem1++; break;

case '2':dem2++; break;

case '3':dem3++; break;

Trang 3

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();

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

Trang 4

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

Trang 5

// Bắt ngoại lệ trong quá trình nhập dữ liệu từ bàn phím

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ầnthiế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;

Trang 6

//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()

// 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");

Trang 7

for(int i=0; i<ds.size();i++)

// 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)

// 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)

Trang 8

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 haykhô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êntiế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 haiphâ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ânsố

- 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.

Trang 9

public static void xuLy() throws IOException

// 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");

// 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

Trang 10

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);

// 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(

Trang 11

}

}

I.4.2 Bài tập

Câu 1: Nhập vào một dãy số, ghi dẫy số này ra tệp “dayso.dat” Đọc lại dẫy số này từ tệp

để tìm tất cả các số nguyên tố trong dẫy này và ghi ra tệp “daynn.dat”

Câu 2: Cho một tệp văn bản có kích thước nhỏ, viết chương trình kiểm tra xem trong tệp

này có chứa xâu s (cho trước) hay không?

+ Nhập vào một dãy số ghi dẫy số này ra tệp tin, sau đó tách tệp này thành hai tệp,một tệp chứa toàn các phần tử chẵn, tệp còn lại chứa toàn các phần tử lẻ

Câu 3: Tìm các số Fibonaci nhỏ hơn một số n (cho trước)

+ Ghi các số tìm được ra tệp theo định dạng như sau:

- Hàng đầu tiên của tệp ghi số n

- Hàng thứ 2 của tệp lần lượt ghi số tìm được, các số này được cách nhau bỏi mộtdấu cách

Câu 4:

+ Ghi ma trận này ra tệp mt.dat theo quy tắc sau:

- Hàng đầu tiên của tệp ghi số hàng của ma trận

- Hàng thứ 2 của tệp ghi số cột của ma trận

- 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:

Trang 12

II PIPEII.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 ramàn hình

- Server nhận được ký tự và tăng mỗi ký tự lên 1 đơn vị rồi gởi về cho Client

* Chương trình Server.

// Khai báo thư viện nhập xuất dữ liệu.

import java.io.*;

// Xây dựng lớp PipedEchoServer kế thừa các phương thức và thuộc tính của lớp Thread

public class PipedEchoServer extends Thread

{

//Biến readPipe thuộc kiểu dữ liệu của PipedInputStream dùng để đọc dữ liệu trên ống dẫn, writePipe thuộc kiểu dữ liệu của PipedOutputStream dùng để ghi dữ liệu lên ống dẫn

// Xây dựng Phương thức ghi đè run() để nhận, xử lý dữ liệu để gửi lại cho Client.

public void run()

} catch (IOException ie)

{ System.out.println("Echo Server bi loi: "+ie );

Trang 13

// Xây dựng lớp PipedEchoClient kế thừa các phương thức và thuộc tính của lớp Thread

public class PipedEchoClient extends Thread

// Xây dựng phương thức ghi đè run() để gửi và đọc kết quả lên màn hình.

public void run()

Trang 14

// Xây dựng phương thức main để thực thi ứng dụng PipedEcho là tạo ra 2 ống dẫn giúp Client và Server có thể trao đổi thông tin với nhau.

public static void main(String args[])

{

try{

PipedOutputStream cwPipe = new PipedOutputStream();

PipedInputStream crPipe = new PipedInputStream();

PipedOutputStream swPipe = new PipedOutputStream(crPipe);

PipedInputStream srPipe = new PipedInputStream(cwPipe);

PipedEchoServer server = new PipedEchoServer(srPipe,swPipe);

PipedEchoClient client = new PipedEchoClient(crPipe,cwPipe);

Khi chạy PipedEcho

Server bat đau lăng nghe .

Client dang ket noi

123qw

234rx

II.2 Bài tập

Câu 1: Hãy xây dựng một chương trình ghi một mảng byte cho trước lên ống dẫn Pipe.

Đọc dữ liệu từ ống dẫn rồi hiện thị kết quả ra màn hình

Câu 2: Hãy xây dựng một ứng dụng cho dịch vụ phản hồi thông tin bằng ống dẫn (Pipe)

theo mô hình Client-Server theo yêu cầu sau:

- Client nhập một mảng ký tự từ bàn phím rồi gửi đến Server, đợi nhận kết quả trả

về và in ra màn hình

- Server sẽ nhận dữ liệu từ Client gửi sang, kiểm tra ký tự đó nếu là ký tự số sẽ gửitrả về cho Client

Trang 15

III SOCKETIII.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ạicho Client

- Đóng kết nối

b) Chương trình phía máy khách

- Kết nối đến Server có cổng kết nối 1234

- Đọc chuỗi từ bàn phím rồi gởi đến Server chờ và nhận kết quả hiện thị ra màn hình

// Biến sv thuộc kiểu dữ liệu ServerSocket đang lắng nghe tại cổng 1234

ServerSocket sv = new ServerSocket(1234);

// sv chấp nhận kết nối

Socket client = sv.accept();

// br dùng để đọc dữ liệu trên socket

BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));

// pw ghi dữ liệu lên socket

PrintWriter pw = new PrintWriter(client.getOutputStream());

String s1 = br.readLine();

s1=chuHoa(s1);

pw.write(s1+ "\n");

pw.flush();

Trang 16

// Hàm chuyển đổi chuỗi thành chuỗi hoa

public static String chuHoa(String s)

public class TCPClient {

public static void main(String[]args)

{

try

{

// Client kết nối đến Server có địa chỉ IP “127.0.0.1”, cổng 1234.

Socket client = new Socket("127.0.0.1",1234);

BufferedReader br = new BufferedReader(new

Trang 17

a) Chương trình phía máy chủ

- Lắng nghe và chấp nhận các kết nối đến trên cổng 9999

- Tạo ra mỗi tuyến cho một kết nối riêng biệt để đáp ứng các yêu cầu của các máykhách đồng thời

- 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 là “quit” (không phân biệt chữ hoa chữ thường) máy chủ

sẽ đóng kết nối với máy khách

+ Nếu dòng nhận được một chuỗi sẽ chuyển chuỗi về chữ hoa sau đó trả về choClient

b) Chương trình phía máy khách

- Kết nối đến chương trình máy chủ đã nêu trong câu a

- Đọc một dòng từ bàn phím và gửi dòng đọc được đến máy chủ

- Nếu dòng đọc được là “quit” (không phân biệt chữ hoa chữ thường) thì ngắt kếtnối với máy chủ và kết thúc chương trình

- Đọc kết quả trả về và in ra màn hình

* Trình tự hoạt động của Server:

// khai báo thư viện nhập xuất

import java.io.*;

// Khai báo thư viện cho các lớp mạng

import java.net.*;

// Xây dựng lớp TCPServer

// Phần 1 lắng nghe tại cổng 9999, khi có client kết nối thì nó sẽ tạo ra một luồng mới để

xử lý yêu cầu của Client.

public class TCPServer

Trang 18

ServerSocket svsk = new ServerSocket(9999);

// Nếu quá trình lắng nghe tại cổng 9999 của Server là đúng thì lặp lại công việc Chấp nhận kết nối của client và tạo ra luồng mới để xử lý thông điệp mà client gởi đến.

// Xây dựng lớp MyThread kế thừa từ lớp Thread để nhận và xử lý thông điệp từ Client

class MyThread extends Thread

PrintWriter pw = new PrintWriter(sk.getOutputStream());

// Lặp lại quá trình nhận thông tin và xử lý thông tin để gởi trả lại cho Client.

Trang 19

// biến sk thuộc kiểu dữ liệu kiểu Socket để tạo kết nối đến máy chủ tại cổng 9999

Socket sk = new Socket("127.0.0.1",9999);

// biến br thuộc kiểu dữ liệu BufferedReader để đọc dữ liệu trên socket

BufferedReader br = new BufferedReader(new

InputStreamReader(sk.getInputStream()));

BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));// biến pw thuộc kiểu dữ liệu PrintWriter để ghi dữ liệu lên socket

PrintWriter pw = new PrintWriter(sk.getOutputStream());

// Lặp lại quá trình nhập chuỗi để gởi cho Server nếu chuỗi nhập vào là “quit” sẽ thoát khỏi quá trình nhập ngược lại sẽ in kết quả ra màn hình

Ngày đăng: 03/07/2014, 06:20

TỪ KHÓA LIÊN QUAN

w