Các cấu trúc điều khiển

Một phần của tài liệu Bài giảng lập trình java phần 1 đh sư phạm kỹ thuật nam định (Trang 43)

Cấu trúc điều khiển là các lệnh kiểm tra và điều khiển quá trình thực hiện các câu lệnh sao cho chương trình thực hiện đúng vàđạt được yêu cầu đặt ra.

a) Cấu trúc lựa chọn if:

Câu lệnh if kiểm tra kết quả của một điều kiện và thực thi một thao tác phù hợp trên cơ sở kết quảđó. Lệnh if có các dạng sau:

Dạng 1: Cú pháp:

if (<biểu thứđiều kiện>)<Câu lệnh> Trong đó:

- Biểu thứđiều kiện là một biểu thức logic

- Câu lệnh là một câu lệnh nào đó muốn thực hiện khi biểu thức logic trả về kết quả là true.

Ý nghĩa của câu lệnh là: nếu biểu thức logic đúng thì thực hiện câu lệnh

Trong trường hợp muốn có nhiều câu lệnh cùng thực hiện khi biểu thức logic đúng (true) thì các lệnh này được bao trong một khối lệnh.

Cú pháp như sau:

33 Ví dụ 1.11:

import java.util.Date; Date today = new Date();

if (today.getDay == 0) System.out.println(“It isSunday.”); Dạng 2:

Cú pháp:

if (<biểu thứđiều kiện>)<Câu lệnh 1> else <Câu lệnh 2> Trong đó:

- biểu thứđiều kiện là một biểu thức logic

- Câu lệnh 1 là một câu lệnh nào đó muốn thực hiện khi biểu thức logic trả về kết quảlà đúng.

- Câu lệnh 2 là một câu lệnh nào đó muốn thực hiện khi biểu thức logic trả về kết quả là sai.

Ý nghĩa của câu lệnh là nếu biểu thức logic đúng thì thực hiện câu lệnh 1 trong trường hợp ngược lại (biểu thức logic sai) thì thực hiện lệnh 2.

Trong trường hợp muốn có nhiều câu lệnh cùng thực hiện khi biểu thức logic đúng (true) hoặc sai (false) thì các lệnh này phải là một khối lệnh. Trong trường hợp đầy đủ ta có thể viết lệnh theo cú pháp như sau:

if (<biểu thứđiều kiện>){[<Các câu lệnh 1>]} else {[<Các câu lệnh 2>]} Ví dụ 1.12:

import java.util.Date; Date today = new Date(); if (today.getDay == 0)

System.out.println(“It is Sunday.”); else

System.out.println(“It is not Sunday.”); Ta cũng có thể dùng các cấu trúc if lồng nhau if <biểu thức boolean 1><khối lệnh 1> else if <biểu thức boolean 2><khối lệnh 2> else if <biểu thức boolean 3><khối lệnh 3> else <khối lệnh else>;

Ví dụ 1.13:

import java.util.Date; Date today = new Date();

34

if (today.getDay == 0) System.out.println(“It is Sunday.”); else if (today.getDay ==1) System.out.println(“It is Monday.”); else if (today.getDay ==2) System.out.println(“It is Tuesday.”); else if (today.getDay ==3) System.out.println(“It is Wednesday.”); else if (today.getDay ==4) System.out.println(“It is Thursday.”); else if (today.getDay ==5) System.out.println(“It is Friday.”); else System.out.println(“It must be Saturday.”);

Cấu trúc lựa chọn Switch: Switch <biểu thức>

{ case <giátrị 1> : <khối lệnh 1>; case <giátrị 2> : <khối lệnh 2>; case <giátrị 3> : <khối lệnh 3>; default : <khối lệnh default>; }

Ví dụ 1.14:

import java.util.Date; Date today = new Date();

Switch (today.getDay) { case 0: //Sunday case 3: //Wednesday case 6: //Saturday

System.out.println(“It‟s Football day!”); break; case 2: //Tuesday

System.out.println(“It‟s Tennis day!”); case 1: //Monday

case 4: //Thursday case 5: //Friday

System.out.println(“It‟s Golf day!”); break; }

b) Cấu trúc lặp: Vòng lặp for:

Câu lệnh for cho phép thực hiện lặp lại công việc cho đến khi biểu thức điều kiện sai.

for ([<khởi tạo>];[<biểu thức kiểm tra>];[<bước nhảy>]) <câu lệnh>

35

- Khởi tạo: là một biểu thức dùng để gán giá trị khởi tạo cho một biến điều khiển lặp

- Biểu thức kiểm tra: là một biểu thức logic dùng để kiểm tra việc lặp nếu biểu thức đúng thì cho phép lặp lại ngược lại sẽ kết thúc vòng lặp.

- Bước nhảy: dùng để thiết lập bước nhảy cho mỗi lần lặp Ví dụ 1.15:

for (int count = 0; count <100; count ++) System.out.println(“Count = ” + count);

Trong trường hợp trong vòng lặp for muốn thực hiện nhiều lệnh thì các câu lệnh phải là một khối lệnh. Trong trường hợp đầy đủ ta có thể viết lệnh theo cú pháp như sau:

for (<khởi tạo>; <biểu thức kiểm tra>; <bước nhảy>) {[<các câu lệnh>]}

Vòng lặp While:

Cú pháp:

while <biểu thức boolean> <khối lệnh>;

Trong đó:

- biểu thức boolean: là một biểu thức logic trả lại một trong 2 giá trị đúng (true) hoặc sai (false)

- khối lệnh: là tập các câu lệnh sẽđược thực hiện trong vòng lặp

Ý nghĩa của câu lệnh như sau: Trong khi biểu thức logic còn đúng thì lặp lại các công việc trong khối lệnh.

Ví dụ 1.16:

int count = 0; while (count < 100)

{ System.out.println (“Count = “+count); count++;

}

Vòng lặp do … while:Vòng lặp này tương tự như vòng lặp while do tuy nhiên khối lệnh sẽđược thực hiện trước khi khiểm tra biểu thức boolean.

do

{ <khối lệnh>;

} while (<biểu thức boolean>) Ví dụ 1.17:

public void ShowYears(int year)

36

} while (year <2000) }

c) Các lệnh nhảy:

Lệnh break: dùng để thoát khỏi cấu trúc switch hoặc thoát khỏi vòng lặp hiện tại. while <biểu thức boolean 1>

{ lệnh 1; lệnh 2; if <biểu thức boolean 2> break; lệnh 3; } lệnh 4;

Ví dụ 1.18: xét đoạn chương trình tìm số nguyên x trong một mảng số nguyên cho trước như sau:

class BreakExam

{ public static void main (String args[]) throws Exception { char ch[] = {'h','e','l','l','o',' ','w','o','r','l','d'};

char c = ' '; int i=0; boolean flag=false;

System.out.print("Nhap ky tu can tim: "); c = (char)System.in.read();

for (i=0; i<=10;i++) { if (ch[i] == c) { flag = true; break; }

}

if (flag == false) System.out.println("Ky tu "+c+" khong tim thay"); else System.out.println("Ky tu "+c+" nam o vi tri thu "+(i+1)); }

}

Lệnh continue: lệnh continue điều khiển chương trình nhảy về đầu vòng lặp, bỏ qua các lệnh trong khối lặp sau nó.

while <biểu thức boolean 1> { lệnh 1;

37 if <biểu thức boolean 2> continue; lệnh 3; } lệnh 4;

Ví dụ 1.19: xét đoạn chương trình in ra các số từ0 đến 9 như sau:

class Continue

{ public static void main(String args[]) { for (int i=0; i<10; i++)

{ System.out.print(i++" "); if ((i%2)==0) continue; System.out.println(""); } } } Nhãn (Label):

Java không hỗ trợ lệnh goto, mặc dù lệnh goto có trong bộ từ khóa. Java thực hiện việc kết hợp lệnh break hay continue với nhãn để thay thế lệnh goto trong việc xử lý lặp như sau:

Ví dụ 1.20:

public void paint (Graphics g) { int line=1;

outsideLoop:

for (int out =0; out<3; out ++)

{ g.drawString(“out = “+ out, 5, line * 20); line ++;

for (int inner=0; inner < 5; inner++) { // tạo biến ngẫu nhiên

double randNum = Math.random();

g.drawString(Double.toString(randNum), 15, line * 20); line++;

if (randNum < 0.1

{ g.drawString(“break to outsideLoop”, 25, line * 20); line++;

break outsideLoop; }

38 if (randNum < 0.6) { g. g.drawString(“continue-outsideLoop, 25, line * 20); line++; continue outsideLoop; } }

g.drawString(“All done”, 50, line *20); }

1.2.7. Hàm –Phƣơng thức (Function – Method) Khái niệm

Hàm hay phương thức trong Java chính là các khối lệnh đơn vị thực hiện những chức năng riêng biệt. Vì trong Java không có một hàm nào là toàn cục mà luôn phải gắn với một đối tượng cụ thể, thể hiện hành vi ứng xử của đối tượng đó. Nên trong ngôn ngữ Java sẽ dùng khái niệm phương thức thay cho khái niệm hàm.

Định nghĩa một phương thức:

Cấu trúc

<private | public | protected><static | abstract | final | native | synchronized><void | integer | … ><tên phương thức> (<đối số1>, <đối số2>, … )

{ <khối lệnh> }

Cách truy xuất

private : phương thức này chỉđược truy xuất bên trong lớp chứa nó. public : có thể truy xuất từ bất kỳ lớp bên ngoài nào.

protected : chỉ các lớp dẫn xuất của lớp chứa phương thức này mới truy xuất được nó.

Cách cập nhật

static: là phương thức có thểđược gọi mà không cần đến đối tượng. Nó chỉ được sử dụng đối với các dữ liệu và các phương thức tĩnh khác.

absttract : phương thức đơn giản nhất, không cài đặt gì ở trong lớp khai báo nó. Nhưng phương thức này sẽ được phát triển trong các lớp là dẫn xuất của lớp hiện hành.

final: phương thức loại này được bảo vệ không cho các lớp dẫn xuất khai báo và cài đặt lại. (overriding).

39

native : là phương thức được viết bằng ngôn ngữ khác Java. Giống như phương thức abstract, phương thức native chỉ có tên gọi và khối lệnh rỗng. Nhưng khác với abstract nó được cài đặt trong các thư viện dùng chung viết bằng ngôn ngữ khác.

synchronized: phương thức loại này đảm bảo dữ liệu sẽ không bị sai lạc khi cùng một lúc hai phương thức truy cập cùng một dữ liệu, thường được sử dụng trong kỹ thuật luồng (thread).

Giá trị trả về

void : là loại phương thức không trả về giá trị nào.

integer, boolean, float, … : kiểu dữ liệu của giá trịmà phương thức trả về.

Gọi một phƣơng thức

Khi muốn một phương thức được thực hiện, ta chỉ cần gọi tên của phương thức và gán các đối số là các giá trị hay các biến có cùng kiểu với các đối sốđã được khai báo.

Ví dụ 1.21:

class CallMethod

{ static public int hinhvuong(int x) { return (x*x); }

public static void main(String args[]) { int canh = 0, len = 0; String chuoi = ""; char buff[] = new char[10];

System.out.print("Nhap canh hinh vuong : "); try { len = System.in.read(buff);

String s = String(buff, 0, len-1); chuoi = s;

canh = Integer(chuoi).intValue(); } catch(Exception e) {}

System.out.println("Dien tich hinh vuong: "+hinhvuong(canh)); }

}

1.2.8. Nhập xuất dữ liệu

Việc nhập xuất dữ liệu với java sẽ được đề cập chi tiết trong chương 3 của tài liệu này. Tuy nhiên để ứng dụng lý thuyết của chương vào giải quyết bài toán cũng như cài đặt các thử nghiệm để hiểu sau hơn về lý thuyết thì ta cần phải biết những thủ tục nhập xuất cơ bản với java. Vì vậy trong phần này sẽ trình bày một số cách thức để nhập xuất dữ liệu với java qua cửa số lệnh (console).

40

Nhập dữ liệu là tác vụ đưa các dữ liệu cụ thể vào cho biến trong chương trình. Như vậy, phải có một nguồn chứa dữ liệu (bàn phím, tập tin, biến khác).

Xuất dữ liệu là tác vụ đưa trị cụ thể của biến trong chương trình ra một nơi chứa (màn hình hay file hay biến khác).

Nhập/xuất dữ liệu là các phương tiện mà chương trình tương tác với người dùng và thường không thể thiếu trong đa số các ứng dụng. Thường có hai cơ chế nhập xuất dữ liệu có tương tác với người dùng là:

 Nhập xuất dữ liệu trong các ứng dụng console application

 Nhập/xuất dữ liệu thông qua các phần tử trên GUI. Cách 1 thường dùng trong các ứng dụng chạy theo cơ chế tuần tự còn cách 2 được áp dụng trong các ứng dụng hướng cửa sổ.

Việc nhập/xuất dữ liệu với java sẽ được đề cập chi tiết trong chương 3 của tài liệu này. Trong phần này chỉ trình bày một số cách thức đơn giản để nhập xuất dữ liệu trong các ứng dụng console application.

a) Xuất dữ liệu

Java cung cấp class System mô tả hệ thống trong đó có chứa 2 đối tượng mặc định dùng để nhập và xuất dữ liệu đó là System.in và System.out.

Để xuất dữ liệu ra màn ta hình dùng 2 phương thức của đối tượng System.out đó là:

 System.out.print(<Dữ liệu xuất>)

 System.out.println([Dữ liệu xuất]);

Trong đó dữ liệu xuất có thể là : ký tự, số, chuỗi,…print là xuất ra màn hình mà không xuống dòng, còn println là xuất ra màn hình và con trỏ sẽ tựđộng xuống dòng.

Ví dụ 1.22: sau đây sẽ xuất ra màn hình một xâu và giá trị của biến

class OutputExam{

public static void main(String args[]) {

int a=10,b=30;

System.out.print(“Tong cua ” + a + “ + ” + b + “ = ” + (a+b)); }

}

Kết quả chạy chương trình là: Tong cua 10 + 30 = 40

41

b) Nhập dữ liệu

Nhập dữ liệu từ bàn phím khá phức tạp vì với mỗi dữ liệu có cách nhập khác nhau: Ký tự thì chỉ cần 1 phím, số nguyên, số thực có thể nhập với nhiều phím nên các phím nhập cần giữ lại bộđệm (Buffer), có thể cần kiểm tra phím nhập.

Java cung cấp 2 gói dữ liệu java.io và java.util chứa các lớp cho việc nhập xuất Gói dữ liệu java.io có các lớp Reader, BufferedReader, InputStream, OutputStrean,…, có chứa các phương thức cho việc nhập dữ liệu (chi tiết sẽ được nghiên cứu ởchương 3).

Ví dụ 1.23: Sau sẽ giúp nhập xuất với các kiểu dữ liệu khác nhau sử dụng các đối tượng của gói java.io

import java.io.*; // file InOutDemo.java class InOutDemo

{ public static void main(String args []) throws java.io.IOException {

Reader inputChar_Obj = new InputStreamReader(System.in); System.out.print("Input a character:");

char c = (char)inputChar_Obj.read() ;

System.out.println(" character read :" + c);

BufferedReader input_Obj= new BufferedReader(new InputStreamReader( System.in));

System.out.print("Input an Integer:");

int n= Integer.valueOf( input_Obj.readLine()).intValue() ; System.out.println(" integer read :" + n);

System.out.print("Input a Double:");

double x= Double.valueOf( input_Obj.readLine()).doubleValue() ; System.out.println(" Double read :" + x);

System.out.print("Input a string:"); String s = input_Obj.readLine();

System.out.println(" String read :" + s); System.out.print("Input a character:"); int m = System.in.read() ;

42

System.out.println(" Code of this character :" + m); } } Kết quả thực hiện chương trình Input a character:r character read :r Input an Integer:123 integer read :123 Input a Double:12.908 Double read :12.908 Input a string:Hello String read :Hello Input a character:A

Code of this character:65

Gói java.util cũng cung cấp lớp Scanner cũng có các phương thức cho việc nhập xuất các loại dữ liệu như: nextLine, next, nextInt, nextFloat, nextDouble,…,

Ví dụ 1.24:Sau đây sử dụng lớp Scanner để nhập dữ liệu

import java.util.Scanner; public class InOutScan {

public static void main(String[] args) { int tuoi;

String ten;

Scanner nhapDuLieu = new Scanner(System.in); System.out.print("Nhập Tên: ");

ten = nhapDuLieu.nextLine(); System.out.print("Nhập Tuổi: "); tuoi = nhapDuLieu.nextInt();

System.out.println("\nTên Vừa Nhập:" + ten+"\n"); System.out.println("Tuổi Vừa Nhập: " + tuoi); }

43

}

Kết quả chạy chương trình:

Câu hỏi và bài tập chƣơng 1

1. Viết chương trình thực hiện các công việc sau: a. Nhập vào 3 sốnguyên dương a, b, c

b. Kiểm tra nếu a, b, c, là 3 cạnh của một tam giác thì tính diện tích, chu vi của tam giác tạo thành bởi 3 cạnh a, b, c đó. Ngược lại thông báo không phải 3 cạnh của tam giác.

2. Viết chương trình thực hiện các công việc sau: a. Nhập vào một số nguyên n

b. Kiểm tra xem có phải n>0 không, nếu đúng thì tính n! và in kết quả ra màn hình, ngược lại thì thông báo ra màn hình n <0.

3.Viết chương trình thực hiện các công việc sau:

a. Nhập vào từ bàn phím 2 số thực a, b và một ký tự là một phép toán (pheptoan) b. Kiểm tra phép toán nhập vào có phải là một trong các phép toán: +, -, *, / không. Nếu đúng tính giá trị của biểu thức a pheptoan b (ví dụ phép toán là + thì tính a+b) và hiển thị kết quảra màn hình ngược lại thông báo lỗi (chú ý yêu cầu kiểm soát cả lỗi chia cho 0).

4.Viết chương trình thực hiện các công việc sau:

a. Nhập vào từ bàn phím 2 số nguyên là tử số và mẫu số của một phân số.

b. Thực hiện tính toán để tìm phân số tối giản của phân sốđã nhập và in kết quả ra màn hình.

5. Viết chương trình thực hiện các công việc sau: a. Nhập vào từ bàn phím 2 số nguyên a và b.

44 6. Viết chương trình thực hiện các công việc sau:

a. Nhập vào từ bàn phím 3 số nguyên a, b và c.

b. Tìm nghiệm của phương trình bậc hai ax2+bx +c=0 và in kết quả ra màn hình 7. Viết chương trình thực hiện các công việc sau:

a. Nhập vào từ bàn phím một sốnguyên dương n.

b. Tính tổng s = 1/2+1/4+...+1/2*n và in kết quả s ra màn hình. 8. Viết chương trình thực hiện các công việc sau:

a. Nhập vào từ bàn phím một sốnguyên dương n.

b. Tính tổng s = 1+1/3+...+1/(2*n+1) và in kết quả s ra màn hình. 9. Viết chương trình thực hiện các công việc sau:

a. Nhập vào từ bàn phím một sốnguyên dương n.

b. Tính tổng s = 1+1/2-1/3+...+(-1)n*1/n và in kết quả s ra màn hình. 10. Viết chương trình thực hiện các công việc sau:

a. Nhập vào từ bàn phím một số nguyên n (0<n<100) và một mảng gồm n số nguyên.

b. Hiển thị mảng đã nhập ra màn hình

c. Tìm phần tử lớn nhất trong mảng và in vị trí của phần tửđó ra màn hình. d. Sắp xếp mảng theo thứ tựtăng dần rồi in mảng sau sắp xếp ra màn hình. 11. Viết chương trình thực hiện các công việc sau:

a. Nhập vào từ bàn phím một số nguyên n (0<n<100) và một mảng gồm n số nguyên.

b. Hiển thị mảng đã nhập ra màn hình

c. Tìm phần tử lớn nhất trong mảng và in vị trí của phần tửđó ra màn hình. d. Sắp xếp mảng theo thứ tự giảm dần rồi in mảng sau sắp xếp ra màn hình.

45

CHƢƠNG 2: LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG TRONG JAVA

2.1. Giới thiệu về lập trình hƣớng đối tƣợng

Lập trình hướng đối tượng (OOP) là một phương pháp thiết kế và phát triển phần mềm. Những ngôn ngữ OOP không chỉ bao gồm cú pháp và một trình biên dịch (compiler) mà còn có một môi trường phát triển toàn diện. Môi trường này bao gồm một thư viện được thiết kế tốt, thuận lợi cho việc sử dụng các đối tượng.

Đối với một ngôn ngữ lập trình hỗ trợ OOP thì việc triển khai kỹ thuật lập trình hướng đối tượng sẽ dễdàng hơn. Kỹ thuật lập trình hướng đối tượng cải tiến việc phát triển các hệ thống phần mềm. Kỹ thuật ấy đề cao nhân tố chức năng (functionality) và các mối quan hệ dữ liệu.

OOP là phương thức tư duy mới để giải quyết vấn đề bằng máy tính. Để đạt kết quả, lập trình viên phải nắm vấn đề thành một thực thể quen thuộc với máy tính. Cách tiếp cận hướng đối tượng cung cấp một giải pháp toàn vẹn để giải quyết vấn đề.

Hãy xem xét một tình huống cần được triển khai thành một hệ thống trên máy vi tính: việc mua bán xe hơi. Vấn đề vi tính hóa việc mua bán xe hơi bao gồm những gì?

Những yếu tố rõ ràng nhất liên quan đến việc mua bán xe hơi là: 1) Các kiểu xe hơi (model).

Một phần của tài liệu Bài giảng lập trình java phần 1 đh sư phạm kỹ thuật nam định (Trang 43)

Tải bản đầy đủ (PDF)

(146 trang)