III.1 Quy tắc đặt tờn biến
Khi khai bỏo cỏc biến trong chương trỡnh Java, ta cần chỳ ý tuõn thủ cỏc điểm sau: Chỉ bắt đầu bằng một ký tự (chữ), một dấu gạch dưới (_) hay một dấu dollard ($). Khụng cú khoảng trống giữa tờn.
Sau ký tự đầu, cú thể dựng cỏc ký tự (chữ), ký tự số, dấu dollard, dấu gạch dưới. Khụng trựng với cỏc từ khoỏ.
III.2 Khai bỏo biến
Cỏc biến trong Java rơi vào hai trường hợp:
Toỏn học: Cỏc biến cú kiểu nguyờn thủy của Java đều thuộc dạng này. Sau khi khai bỏo, biến được cấp phỏt một vựng nhớ cố định tựy theo kớch thước của kiểu dữ liệu của biến đú.
Địa chỉ: Cỏc biến đối tượng được lưu ở dạng này. Biến chỉ lưu giỏ trị địa chỉ đầu của một vựng nhớ được cấp phỏt cho đối tượng.
Vớ dụ khai bỏo cho từng kiểu biến toỏn học: byte i; short j; int k; long x; float y; double z; char ch; boolean bQuit;
Cỏc biến địa chỉ thường sử dụng để lưu trữ cỏc địa chỉ mảng, con trỏ, đối tượng. Vớ dụ về khai bỏo biến kiểu địa chỉ:
String strHello; //khai bỏo một chuỗi
AudioClip music; // vớ dụ lớp của AudioClip Khởi động giỏ trị cho biến
Vớ dụ về khởi động biến ngay lỳc khai bỏo: byte i = 3; short j = 10; int k = 1; long x = 1234567L; float y = 1.25f; double z = 23.45d; char ch = „T‟; boolean bQuit = true;
String strHello = “Hello everybody”;
Ở đõy cần chỳ ý rằng khi khởi tạo giỏ trị cho cỏc kiểu số nờn xỏc định rừ kiểu dữ liệu của giỏ trị.
Cỏc giỏ trị mặc định
byte 0
short 0
long 0L; float 0.0f; double 0.0d;
char null;
boolean false; Cỏc biến dẫn suất null
III.3 Biến kiểu mảng
Khi cần làm việc với một tập cỏc giỏ trị cú cựng kiểu dữ liệu, ta cú thể sử dụng một biến mảng để lưu trữ chỳng.
Khai bỏo:
Một biến mảng được khai bỏo theo hai cỏch: Sử dụng cặp ngoặc vuụng đặt sau tờn biến. Sử dụng cặp ngoặc vuụng đặt sau kiểu dữ liệu. Vớ dụ:
int [] intArray; hoặc int intArray[]; đều cho ta một mảng số nguyờn cú tờn la intArray. Thụng thường ta dựng kiểu khai bỏo thứ nhất để cú thể khai bỏo nhiều biến mảng cựng kiểu dữ liệu:
int [] intArray1, intArray2, intArray3;
Định vị mảng
Sau khi khai bỏo, bản thõn mảng chưa xỏc định hay chưa được định vị vỡ chưa được cấp phỏt vựng nhớ . Do đú, mảng cần được cấp phỏt vựng nhớ trước khi sử dụng.
Dựng từ khoỏ new để định vị cho một mảng trong vựng nhớ, vớ dụ: int IntArray[] = new int[100];//tạo mảng 100pt
float floatArray[];
floatArray = new float[10]; //tạo mảng 10 pt Khởi tạo giỏ trị cho mảng
Ta cũng cú thể khởi tạo một mảng bằng cỏch liệt kờ cỏc phần tử của nú, vớ dụ: int IntArray[] = {1, 2, 3, 4, 5};
char [] charArray = {„a‟, „b‟, „c‟}; IntArray[] = new int[] {1, 2, 3, 4, 5}; Truy cập cỏc phần tử của mảng
Cỏc phần tử trong một mảng luụn được đỏnh số bắt đầu từ số 0. Kiểu dữ liệu của chỉ số là kiểu int. Tuy nhiờn nếu dựng kiểu char thỡ Java sẽ tự động chuyển sang mó ASCII tương ứng. Vớ dụ b[„a‟] tương ứng với b[97].
Phần tử đầu tiờn là phần tử thứ 0, và phần tử cuối cựng của một mảng cú n phần tử là n-1. Cỏc phần tử của mảng được truy cập một cỏch trực tiếp bằng chỉ số của nú.
Vớ dụ:
int IntArray[] = {1, 2, 3, 4, 5}; int a = IntArray[2];//a=3 int b = IntArray[0];//b=1
Ta cú thể gỏn cỏc giỏ trị của mảng thụng qua truy nhập vào từng phần tử của mảng. Vớ dụ:
int intList[] = new int[10]; //tạo mảng 10pt
intList[0] = 99; //Phần tử thứ 0 (đầu tiờn) cú giỏ trị là 99. for (sort i=1; i<10; i++)
intList[i] = 1; //cỏc phần tử cũn lại bằng 1 Vớ dụ: int x, y, k; x = intList[0]; //x=99 y = intList[5]; //y=1 k = intList[y+1]; //k=intList[6]=1 Mảng nhiều chiều:
Khai bỏo mảng 2 chiều:
<kiểu phần tử>[][] <tờn mảng> = {<danh sỏch phần tử>}; Vớ dụ: int[][] b = {{1,2},{3,4}};
Đõy là khai bỏo và khởi tạo giỏ trị cho một mạng 2 chiều kớch thước 2 x 2. {1,2} là cỏc phần tử của hàng 1; {3,4} là cỏc phần tử trờn hàng thứ 2.
Hoặc ta cú thể khai bỏo rừ số hàng và số cột của mảng: int b[][] = new int[ 3 ][ 4 ];
Thậm chớ ta cú thể khai bỏo một mảng 3 chiều hoặc hơn. int b[][][] = {{{1,2},{3,4}},{{5,6},{7,8}}};
Ta được b[0][0][0] =1; b[0][0][1]=2;b[1][1][1]=8;b[0][1][0]=3;
III.4 Hằng số (literal)
Là một giỏ trị khụng đổi được sử dụng trong chương trỡnh. Hằng số được biểu diễn như chớnh nú chứ khụng là một giỏ trị của biến hay một kết quả của biểu thức. Giỏ trị của hằng số khụng thể bị thay đổi.
Vớ dụ: Pi = 3.1415.
Tờn của hằng số được đặt tờn như tờn biến. Cỏch khai bỏo hằng cũng tương tự như biến nhưng cú dựng thờm từ khúa final:
<phạm vi> final <kiểu dữ liệu của hằng> <tờn hằng> = <giỏ trị> Vớ dụ: public final String mauda ="vang";
Hằng số cú thể là:
Hằng số nguyờn:
Hằng cú thể được biểu diễn dưới dạng thập phõn, bỏt phõn, thập lục phõn. Vớ dụ: biểu diễn số 15 dạng int: 15. dạng long: 15L. dạng bỏt phõn: 017. dạng thập lục phõn: 0xF. Hằng số thực:
Tương tự như hằng số nguyờn, để chỉ rừ hằng là float ta thờm vĩ ngữ “ f ” hay “F”, hằng là double ta thờm “d” hay “D”.
Hằng Boolean:
Một hằng số kiểu boolean cú giỏ trị là true hoặc false. Trong Java, cỏc giỏ trị 0 và 1
khụng được dựng thay thế cho false và true như trong C hoặc C++.
Hằng ký tự:
Là một ký tự đơn giản hay một chuỗi ESCAPE, hằng ký tự được đặt trong hai dấu ngoặc đơn „‟. Cỏc chuỗi ESCAPE:
„\b‟ : Xoỏ lựi. „\n‟ : Xuống dũng. „\t‟ : Tab ngang.
„\f‟ : đẩy trang. „\r‟ : dấu enter. „\”‟ : nhỏy kộp. „\’‟ : nhỏy đơn. „\\‟ : sổ ngược. „uxxxx‟: ký tự unicode. Vớ dụ:
System.out.println(“Xin chào bạn \n Nguyễn Văn A”); Sẽ in ra màn hỡnh kết quả:
Xin chào bạn Nguyễn Văn A
Hằng chuỗi ký tự:
Một hằng chuỗi ký tự cú thể cú 0 ký tự (hằng chuỗi rỗng) hay nhiều ký tự. Vớ dụ: “A String”, “” //chuỗi rỗng, “dong 1 \t\n dong 2”.
III.5 Phạm vi hoạt động của hằng và biến:
Khối lệnh Block 1 chứa 2 khối lệnh con Block 2, Block 3.
Biến hay hằng sẽ chỉ cú ý nghĩa trong phạm vi khối lệnh mà nú được khai bỏo.
IV. Cỏc toỏn tử và biểu thức
IV.1 Cỏc toỏn tử và thứ tự ưu tiờn
Cỏc toỏn tử thường sử dụng: Toỏn tử í nghĩa Vớ dụ = Gỏn x=10 != so sỏnh khỏc x!=5 > so sỏnh lớn hơn x>5 < so sỏnh nhỏ hơn x<20 >= lớn hơn hoặc bằng x>=10 <= nhỏ hơn hoặc bằng x<=10 + cộng y=x+1 - trừ y=x-1 * Nhõn y=x*3 / Chia y=x/3 { Block 1 } { Block 2 } { Block 3 }
% Lấy phần dư 10%3 = 1
++ tăng giỏ trị lờn 1 x++
-- giảm giỏ trị đi 1 x--
+= cộng kết hợp phộp gỏn x+=y tương đương x=x+y
-= trừ kết hợp phộp gỏn x-=y tương đương x=x-y
*= nhõn kết hợp phộp gỏn x*=y tương đương x=x*y
/= chia kết hợp phộp gỏn x/=y tương đương x=x/y
^ phộp XOR trờn bit x ^ y
| phộp OR trờn bit x | y
& phộp và trờn bit
! Toỏn tử logic NOT
&& Toỏn tử logic AND
|| Toỏn tử logic OR
= = So sỏnh bằng nhau
Thứ tự ưu tiờn:
( ), *, /, %, +, -,= =, !=, &, ^, |, &&, ||, =, %=, /=, *=, -=, +=
IV.2 Biểu thức
Biểu thức là sự kết hợp cỏc biến số, cỏc giỏ trị bởi cỏc toỏn tử hoặc cú thể là một phộp gỏn giỏ trị một biểu thức cho một biến số.
Vớ dụ: (x+3)/(y-2);
Cú 3 loại biểu thức chớnh là:
Biểu thức số liờn kết cỏc biến số, cỏc hằng bằng cỏc phộp toỏn số, kết quả là một giỏ trị số.
Biểu thức gỏn dựng để gỏn giỏ trị cho một biến, một hằng. Biểu thức logic chỉ cho ra kết quả là cỏc giỏ trị true hay false.
Khi sử dụng cõu lệnh gỏn kết quả của một biểu thức cho một biến, ta cần chỳ ý tới vấn đề đồng nhất kiểu dữ liệu giữa hai vế để trỏnh mất thụng tin. Vớ dụ:
Double delta = 0.0d; //khai bỏo một biến số thực cú tờn delta delta = 1/ 100; // Gỏn cho delta kết quả của phộp chia 1 cho 100.
Trong tỡnh huống này, ta khụng thu được delta = 0.01 như mong đợi mà là delta =0. Lý do là cỏc số 1 và 100 đều được hiểu là cỏc số nguyờn và kết quả của phộp chia được tự động làm trũn thành một giỏ trị nguyờn trước khi gỏn cho delta. Để khắc phục tỡnh trạng này, ta cần xỏc định rừ cỏc số 1 và 100 là cỏc số double.
delta = 1d/100d;
V. Cỏc lệnh điều khiển rẽ nhỏnh V.1 Lệnh if
Lệnh if...{...}: là một phộp kiểm tra giỏ trị của một biểu thức boolean, nếu cho giỏ trị là
true thỡ khối lệnh sẽ được thực hiện. Cấu trỳc:
if <biểu thức boolean> {
}
Nếu biểu thức boolean đỳng, khối lệnh sẽ được thực hiện, cũn nếu biểu thức đú sai thỡ khối lệnh sẽ bị bỏ qua.
Vớ dụ:
public class dkIfThen {
public static void main(String[] args) { int x=1;
int y=x+1; if (x<y) {
System.out.println("x>y"); } }}
Dạng 2 của cõu lệnh if:
if <biểu thức boolean> { <khối lệnh 1>; } else { <khối lệnh 2>; }
Nếu biểu thức boolean đỳng thỡ <khối lệnh 1> được thực hiện, cũn nếu biểu thức boolean sai thỡ <khối lệnh 2> được thực hiện.
Vớ dụ:
public class dkIfThen {
public static void main(String[] args) { int x=1; int y=x-1; if (x<y) { System.out.println("x>y"); } else { System.out.println("x<y"); }}} V.2. Lệnh switch …case
Lệnh switch ... case ...: Cho phộp chọn nhiều trường hợp xảy ra của giỏ trị so sỏnh. Cấu trỳc:
switch <biểu thức>{
case <giỏ trị 1>: <khối lệnh 1>; break; case <giỏ trị 2>: <khối lệnh 2>; break; ...
case <giỏ trị n>: <khối lệnh n>; break; default: <khối lệnh default>; break; }
Một số chỳ ý khi sử dụng lệnh switch-case:
Nếu khụng sử dụng lệnh break mỗi khi kết thỳc cỏc khối lệnh thỡ sau khi thực hiện xong khối lệnh, cỏc lệnh tiếp theo sẽ được thực hiện.
VI. Cỏc lệnh lặp VI.1. Vũng lặp for
Khi muốn một khối lệnh được thực hiện với một số lần biết trước, ta cú thể sử dụng một vũng lặp for.
Cấu trỳc lệnh:
for([<khởi tạo>]; [<biểu thức kiểm tra>]; [<bước nhảy>]) {
<Khối lệnh>; }
Bắt đầu với giỏ trị <khởi tạo> của biến đếm, <khối lệnh> được thực hiện. Sau mỗi lần thực hiện xong <khối lệnh>, biến đếm thay đổi giỏ trị một lượng bằng <bước nhảy> và <biểu thức kiểm tra> được tớnh lại. Nếu biểu thức kiểm tra là true thỡ lại thực hiện khối lệnh, cũn nếu là false, vũng lặp chấm dứt.
Lưu đồ hoạt động của vũng lặp for như sau:
Vớ dụ: tớnh tổng 1 dóy số thực public class vdFor {
public static void main(String[] args) { double accounts[]={1.2,1.4,1.6}; double sum=0;
for (int i=0;i<accounts.length;i++){ sum+=accounts[i]; } System.out.println(sum); } Biểu thức kiểm tra Thực hiện khối lệnh Kết thỳc vũng for Biểu thức điều chỉnh
theo bước nhảy
Biểu thức biến điều khiển
false
}//kết quả là: 4.2
Cỏc vũng for cú thể được đặt lồng nhau nếu cần Vớ dụ:
for(int i=0; i<10; i++) { [cỏc cõu lệnh; ] for(int j=0; j<5; j++) { [cỏc cõu lệnh; ] ... } [cỏc cõu lệnh; ] } VI.2. Vũng lặp while
Khi một khối lệnh cần được thực hiện, thường là với một số lần khụng được biết trước, ta cú thể sử dụng vũng lặp while.
Cấu trỳc lệnh:
while <bt boolean> { <Khối lệnh>; }
Khối lệnh được thực hiện khi <bt boolean> cũn cú giỏ trị true.
Chỳ ý: trong khối lệnh phải cú cõu lệnh cú tỏc dụng ảnh hưởng tới kết quả <bt boolean>
để vũng lặp cú thể dừng.
Lưu đồ thực hiện:
VI.3. Vũng lặp do... while
Vũng lặp này cú ý nghĩa tương tự như vũng lặp while nhưng <khối lệnh> được thực hiện ngay ở vũng đầu tiờn mà chưa cần kiểm tra kết quả <biểu thức boolean>.
Bt boolean Cỏc cõu lệnh Cõu lệnh tiếp theo false true
Cấu trỳc lệnh: do {
<khối lệnh>;
} while <biểu thức boolean>;
Vũng lặp này cho thực hiện <khối lệnh> rồi mới kiểm tra <biểu thức boolean>. Nếu <biểu thức boolean> cú giỏ trị true thỡ tiếp tục thực hiện <khối lệnh>, nếu khụng sẽ dừng vũng lặp.
Vớ dụ tớnh tổng 10 số đầu tiờn: public class vdDoWhile {
public static void main(String[] args) { int x=1, sum=0; do{ sum+=x; x++; } while (x<11); System.out.println(sum); } } //kết quả là: 55 VI.4. Phộp nhảy
Trong một số trường hợp, việc thực hiện cỏc vũng lặp đụi khi khụng theo hết vũng mà cú thể dừng hoặc thoỏt khỏi vũng lặp.
Vớ dụ: Tỡm một giỏ trị nào đú trong một dóy 1000 phần tử. Khi thực hiện vũng lặp duyệt dóy, so sỏnh cỏc phần tử của dóy với giỏ trị cần tỡm từ phần tử đầu tiờn cho đến phần tử cuối cựng, nếu tỡm thấy phải thụi duyệt dóy ngay.
Việc nhảy ra khỏi vũng lặp được thực hiện với từ khoỏ break hoặc kết thỳc vũng hiện tại với lệnh continue.
Lệnh break
Lệnh này kết thỳc ngay vũng lặp trong cựng (nếu cú nhiều vũng lồng nhau) chứa nú. Vớ dụ: while <bt boolean 1>{ lệnh 1; lệnh 2; if <bt boolean 2> break; lệnh 3; } lệnh 4; Lệnh continue
Cho phộp chương trỡnh bỏ qua vũng hiện tại và nhảy đến vũng tiếp theo. Vớ dụ:
while <bt boolean 1>{ lệnh 1;
lệnh 2;
{ …….. continue; } lệnh 3; } lệnh 4;
Khi <bt boolean 2> cú giỏ trị true, lệnh continue được thực hiện, chương trỡnh sẽ khụng thực hiện tiếp <lệnh 3> mà quay lại kiểm tra <bt boolean 1>.
VII. Vào dữ liệu từ bàn phớm và xuất dữ liệu ra màn hỡnh VII.1. Lấy giỏ trị nhập vào từ bàn phớm VII.1. Lấy giỏ trị nhập vào từ bàn phớm
Để lấy giỏ trị mà người sử dụng nhập từ bàn phớm, ta làm theo cỏc bước sau:
1. Khai bỏo biến thuộc lớp Scanner”. Lớp Scanner chỉ được hỗ trợ từ phiờn bản Java 1.5 và nằm trong gúi java.util.
// Khai bỏo một biến Scanner cú tờn là “nhap”.
Java.util.Scanner nhap = new java.util.Scanner(System.in); 2. Lấy giỏ trị nhập vào:
System.out.print("What is your name? "); // In ra màn hỡnh một cõu hỏi tờn /* Khai bỏo và gỏn giỏ trị nhập từ bàn phớm cho một biến kiểu String cú tờn name.*/ String name = nhap.nextLine();
Để đọc 1 từ trong chuỗi nhập vào: String firstName = nhap.next(); Nếu đọc vào một số nguyờn: int Tuoi = nhap.nextInt();
Tương tự cho cỏc kiểu dữ liệu khỏc. Vớ dụ:
import java.util.*; public class InputTest {
public static void main(String[] args) {
Scanner nhap = new Scanner(System.in); // Lay gia trị nhap ho ten
System.out.print("What is your name? "); String name = nhap.nextLine();
// Lay gia tri nhap tiep theo
System.out.print("How old are you? "); int age = nhap.nextInt();
// Hien thi ket qua nhap tren man hinh
System.out.println("Hello, " + name + ". Next year, you'll be " + (age + 1)); }
VII.2 Kết xuất dữ liệu ra màn hỡnh
Trong cỏc chương trỡnh vớ dụ trờn, ta đó biết dựng hàm System.out.print để in dữ liệu ra màn hỡnh. Tuy nhiờn, trong một số trường hợp ta cần định dạng dữ liệu xuất ra chẳng hạn như hiển thị một số thực dạng thập phõn với độ chớnh xỏc nhất định.
System.out.printf(“%8.1f”, 10/3);
System.out.printf(“Hello, %s. You have %f VND ”, name,money); Sau đõy là bảng cỏc ký tự định dạng: Ký tự định dạng Định dạng Vớ dụ D Số nguyờn thập phõn 159 X Số nguyờn hệ 16 9f O Số nguyờn hệ 8 237 F Số thực float 15.9
E Số thực float theo ký phỏp cơ số e 1.59e+01
A Số thực float dạng Hexa 0x1.fccdp3
S String Hello
C Ký tự H
B Boolean True
H Hash code 42628b2
tx Date and time
% Ký hiệu phần trăm %
N Xuống dũng
Sau đõy là vớ dụ sử dụng cỏc ký tự định dạng khi xuất dữ liệu ra màn hỡnh. public class TestFormat
{
public static void main(String[] argvs) {
double sothuc = 10.09898765;
/*In ra số thực chiếm 10 ký tự trờn màn hỡnh trong đú phần thập phõn chiếm 3 ký tự*/ System.out.printf("Ket qua 3 so sau dau phay la %10.3f \n",sothuc);
int songuyen =100; /*In ra số nguyờn ở hệ cơ số 16*/
System.out.printf("He 16 cua 100 duoc viet la: %x \n",songuyen); /*In ra số nguyờn ở hệ cơ số 8*/
System.out.printf("He 8 cua 100 duoc viet la: %o \n",songuyen); /*In ra ký tự đặc biệt “” */