Chương 5: Mảng (array) và chuỗi (string)

0

5.1. Mảng 1 chiều

5.1.1. Khai báo và tạo mảng

Mảng được dùng để lưu trữ các khoản mục (items) cùng kiểu dữ liệu liền kề nhau trong bộ nhớ. Mỗi lần ta khai báo kích thước của một mảng, nó sẽ không thể thay đổi. Dữ liệu trên mảng có thể là kiểu dữ liệu nguyên thuỷ hoặc đối tượng. Cũng như các biến, ta có thể gán các giá trị vào mảng tại các phần tử được tạo ra trong mảng. Nếu không, Java sẽ gán giá trị mặc định vào tất cả các phần tử của mảng, giá trị mặc định phụ thuộc vào kiểu dữ liệu.

Ví dụ : nếu kiểu dữ liệu là nguyên (int) thì giá trị mặc định ban đầu sẽ là 0.

Mảng có thể được khai báo bằng 3 cách :

Cách khai báo Mô tả Cú pháp Ví dụ
Chỉ đơn thuần khai báo Chỉ đơn thuần khai báo mảng Datatype identifier[] char ch[ ];

//khai báo mảng ký tự có tên ch

Khai báo và tạo mảng Khai báo và cấp phát bộ nhớ cho các phần tử mảng sử dụng toán tử   “new” Datatype identifier[]

= new datatype [size ]

char ch[] = new

char [10 ];

//Khai báo một mảng ch và lưu trữ 10 ký tự

Khai báo, kiến tạo và khởi tạo Khai báo mảng, cấp phát bộ nhớ cho nó và gán các giá trị ban đầu cho các phần tử của mảng Datatype identifier[]

= {value1,value2…};

char ch []

= {‘A’,’B’,’C’,’D’ };

//khai báo mảng ch và lưu 4 chữ cái kiểu ký tự

Bảng 2.3 Khai báo mảng

Để xác định tên và số phần tử của mảng ta cần xem xét các phần tử mảng.Số phần tử bắt đầu với 0 cho phần tử đầu,1 cho phần tử thứ hai và cứ tiếp như vậy.

5.1.2. Sắp xếp mảng

   Sử dụng các thuật toán sắp xếp như: Thuật toán đổi chỗ trực tiếp, thuật toán nổi bọt, thuật toán chèn trực tiếp, thuật toán vun đống, …

   Ứng dụng các thuật toán trên để sắp xếp dãy số (mảng số) theo chiều tăng dần, hoặc giảm dần với dãy số nhập vào từ bàn phím.

5.1.3. Mảng đối tượng

         Tương tự như mảng dữ liệu thông thường. Chúng ta có thể khai báo các mảng đối tượng từ các lớp đã được định nghĩa.

Ví dụ:

// khai bao lớp

         class A{

                     // khai báo thuộc tính

                     // phương thức

                     …

         }

         // khai báo mảng đối tượng m có kích thước là 10.

         A[] m=new A[10];

 

//Để sử dụng được mảng m ta phải khởi tạo từng đối tượng là thành phần của mảng

//(thường sử dụng cấu trúc lặp).

5.1.4. Mảng đa chiều.

       Các mảng đa chiều trong Java được coi như là các mảng đối tượng chứa các tham chiếu đến các mảng khác

Số chiều được quy định bởi số cặp ngoặc vuông [].

Sau đâu là một số ví dụ:

  • Bộ khởi tạo mảng cho mảng hai chiều:

            int[][] mac1 = { { 1, 2, 3, }, { 4, 5, 6, } };

  • Một mảng động được tạo ra.

      int[][] mac2 = new int[n][m]; 

  • Một mảng với các véc-tơ có kích thước khác nhau. Mảng phụ w xác định độ dài của các véc-tơ này.

Ví dụ:

public class MultiArr {

public static void main(String[] arg) {

   int w[] = { 2, 3, 4 };

   int n = 3;

   int[][] m3 = new int[n][];   // sizes of the rows are set dynamically

   for(int i = 0; i < m3.length; i++) {

     m3[i]= new int[w[i]];

   for (int j = 0; j < m3[i].length; j++)

            m3[i][j]= i + j;

   }
   for (int i = 0; i < m3.length; i++) {

     System.out.println(“Size of the ” + i + “-th row ” + m3[i].length);

     String out = ” “;

     for(int j = 0; j < m3[i].length; j++) out += ” ” + m3[i][j];

           System.out.println(out);
   }
}
}

5.2. Chuỗi (string)

Chuỗi là tập các kí tự đứng liền nhau được giới hạn trong dấu ngoặc kép như: hello word; hoc.itop.vn”
Sau đây chúng ta hãy cùng tìm hiểu các vấn đề về chuỗi trong java.

  • Khai báo và khởi tạo Java cung cấp các kiểu khai báo và khởi tạo string như sau:
  • Khai báo một xâu rỗng

Ví dụ: String str1=new String( ); //khởi tạo str1 là một xâu trống

  • Khai báo và khởi tạo một xâu bằng một chuỗi cho trước.

Ví dụ: String str2=new String(“Hello word”); //khởi tạo str2 bằng “Hello word”

  • Khai báo và khởi tạo một xâu bằng một mảng kí tự cho trước.

Ví dụ: char ch[ ]={‘a’,’b’,’c’,’d’,’e’}; String str3=new String[ch];

Kết quả str3 là xâu “abcde”· Khai báo và khởi tạo một xâu bằng cách chọn một vài kí tự trong một mảng kí tự cho trước.

Ví dụ:

  char ch[ ]={‘a’,’b’,’c’,’d’,’e’};

  String str4=new String[ch,0,2];

Kết quả str4 là xâu ab, vì khởi tạo này sẽ khởi tạo xâu str4 là lấy 2 kí tự từ vị trí thứ 0.

  • Thao tác nối chuỗi (cộng 2 chuỗi)
  • Cộng 2 chuỗi bằng dấu cộng (+)

Ví dụ: String str1=new String(“Hello word” );

System.out.printf(“toi muon noi ”+str1);

Kết quả của đoạn mã trên sẽ in ra dong chữ: “toi muon noi Hello word”

Chú ý:java có khả năng tự chuyển bất cứ dữ liệu kiểu số nào khi cộng vào String.
Ví dụ: int n=100;

Float m=100.123;

System.out.printf(“so nguyen la ”+n+”so thuc la “+m);

Kết quả sẽ in ra chuỗi số: “so nguyen la 100 so thuc la 100.123”có nghĩa là java sẽ chuyển n và m thành kiểu string rồi sau đó sẽ nối vào chuỗi phía trước.

Khi cộng chuỗi bằng dấu cộng ,kết quả sẽ đưa ra bằng cách nỗi 2 chuỗi vào vị trí cuối cùng

của chuỗi đầu tiên. Cách nối chuỗi này thường được sử dụng khi in ra màn hình hoặc chuyển kiểu dữ liệu số sang string.

  • Nối 2 chuỗi bằng phương thức concat( )

Khác với việc nối chuỗi bằng dấu cộng là nối 2 chuỗi tại vị trí cuối cùng của chuỗi đầu tiên.thay vào đó phương thức này sẽ trả về một chuỗi mới.

Ví dụ:

  String str1,str2,str3;

   str1=”Welcome”;

   str2=”hoc.itop.vn”;
   str3=str1.concat(str2);

  • Các hàm xử lí với chuỗi trong java
  • substring

Ví dụ:

  String str1=new String( “hoc.itop.vn” );

   String str2=str1.substring(0,3);

Kết quả là str2 bằng “hoc”.có nghĩa là phương thức substring sẽ lấy 3 kí tự trong xâu

str1 bắt đầu từ kí tự thứ 0.

  • length trả về độ dài chuỗi

Ví dụ:

String str1=new String(“”hoc.itop.vn””);

int n=str1.length( );

kết quả là n=11 nghĩa là phương thức length( ) sẽ trả về độ dài xâu kí tự

  • charAt

Ví dụ:

String str1=new String(“”itop.vn””);

char ch=str1.charAt(3);

kết quả là ch=’p’ nghĩa là phương thức charAt( 3) sẽ trả về kí tự thứ 3 tính từ vị trí thư 0 trong xâu str1

  • equals: phương thức này so sánh 2 chuỗi.kết quả trả về có kiểu Boolean

ví dụ:

String str1=new String(“”hello””);

String str2=new String(“”ITOP””);

Boolean k=str1.equals(str2);

Kết quả trả về là k=false nghĩa là phương thức equals sẽ so sánh từng kí tự trong 2 chuỗi.

Chú ý là trong java có phân biệt kiểu chữ hoa và chữ thường như:”iTop”#”ITOP”

  • compareTo:

So sánh 2 chuỗi lần lượt thứ tự từng kí tự của 2 chuỗi nghĩa là: int

a=str1.compareTo(str2);

a=0 nếu s2=s1

a>0 nếu s2>s1

a<0 nếu s2<s1

Ví dụ:

String str1=new String(“kc”);

String str2=new String(“kavcb”);

int a=str1.compareTo(str2);\\ kết quả là a>0 vì “kc”>”kavcb”

  • toCharArray

Là phương thức đổi chuỗi thành mảng kí tự.

Ví dụ:

String str1==new String(“itop.vn”);

char [ ] ch=str1.toCharArray( ); //

//kết quả là mảng ch={‘i’,’t’,’o’,’p’,’.’,’v’,’n’}

  • indexOf

Ví dụ:

String str1=new String( “hoc.itop.vn”);

String str2=new String(op);

String str3=new String(ab);

int n=str1.indexOf(str2);

int m=str1.indexOf(str3);

//kết quả là n=7 và m=-1 nghĩa là phương thức này sẽ trả về vị trí của chuỗi str2 và str3

trong chuỗi str1.nếu không tìm thấy sẽ trả về giá trị -1

 

  • startsWith( )

Trả về giá trị kiểu Boolean

Ví dụ:

String str1=”hoc.itop.vn”;

String str2=”hoc”;

boolean k=str1.startsWith(str2);

kết quả là k=true nghĩa là phương thức này sẽ kiểm tra xem chuỗi một có bắt đầu bằng chuỗi 2 hay không

 

  • endsWith( )

Cũng như hàm startsWith( ) kết quả trả về là kiểu boolean.
Ví dụ:

String str1=”hoc.itop.vn”;

String str2=”com”;

boolean k=str1.endsWith(str2);

kết quả là k=false nghĩa là hàm này sẽ kiểm tra xem chuỗi str1 có kết thúc là chuỗi str2 hay không.

 

  • copyValueOf( )

phương thức này trả về một chuỗi được rút ra từ một mảng kí tự.

Ví dụ:

char ch[ ]={‘a’,’b’,’c’,’d’,’e’};

String str1=String.copyValueOf(2,2);

Kết quả là str1=”cd” nghĩa là xâu str1 được rút ra từ mảng ch bằng cách lấy 2 phần tử của mảng và lấy từ vị trí thứ 2.

 

  • toUpperCase( )

Phương thức này sẽ trả về chữ hoa của chuỗi

Ví dụ:

String str1=”hello”;

String str2=str1.toUpperCase( );

Kết quả là str2=”HELLO”;

 

  • toLowerCase( )

Phương thức này sẽ trả về chữ thường của chuỗi

Ví dụ:

String str1=”hello”;

String str2=str1.toLowerCase( );

Kết quả là str2=”hello”;

 

  • Chuyển kiểu dữ liệu từ String sang số các phương thức chuyển kiểu dữ liệu từ String sang số nằm trong gói thư viện java.lang ta có bảng các phương thức như sau:

 

   Ví dụ:

String str1=new String(“124”);

int n=Integer.parseInt(str1);

kết quả là n=124

 

5.3. Các ví dụ minh hoạ

Ví dụ 1: Nhập ký tự từ bàn phím

import java.io.*;

/* gói này cung cấp thự viện xuất nhập hệ thống thông qua những luồng dữ //liệu và hệ thống file.*/

class InputChar

{

  public static void main(String args[])

{

char ch = ‘’;

try

{

  ch = (char) System.in.read();

}

catch(Exception e)

{

  System.out.println(“Nhập lỗi!”);

 }

  System.out.println(“Ky tu vua nhap:” + ch);

}

}

Ví dụ 2: Nhập dữ liệu số

import java.io.*;

class inputNum

{

public static void main(String[] args)

{

int n=0;

try

{

BufferedReader in = new BufferedReader(new InputStreamReader(

System.in));

String s;

s = in.readLine();

n = Integer.parseInt(s);

}

catch(Exception e)

{

System.out.println(“Nhập dữ liệu bị lỗi !”);

}

System.out.println(“Bạn vừa nhập số:” + n);

}

}

Ví dụ 3: Nhập và xuất giá trị các phần tử của một mảng các số nguyên.

class ArrayDemo

{

public static void main(String args[])

{

int arrInt[] = new int[10];

int i;

for(i = 0; i < 10; i = i+1)

arrInt[i]= i;

for(i = 0; i < 10; i = i+1)

System.out.println(“This is arrInt[” + i + “]: ” + arrInt[i]);

}

}

 

Ví dụ 4: Tìm phần tử có giá trị nhỏ nhất (Min) và lớn nhất (Max) trong một mảng.

// tìm min

 

class MinMax

{

public static void main(String args[])

{

int nums[] = new int[10];

int min, max; nums[0] = 99; nums[1] = -10;

nums[2] = 100123; nums[3] = 18; nums[4] = -978;

nums[5] = 5623; nums[6] = 463;

nums[7] = -9; nums[8] = 287;

nums[9] = 49; min = max = nums[0];

 

for(int i=1; i < 10; i++)

{

if(nums[i]< min) min = nums[i];

if(nums[i]> max) max = nums[i];

}

System.out.println(“min and max: ” + min + ” ” + max);

}

}

 

// tìm max

class MinMax2

{

public static void main(String args[])

{

int nums[] = { 99, -10, 100123, 18, -978, 5623, 463, -9, 287, 49 };

int min, max;

min = max = nums[0];

for(int i=1; i < 10; i++)

{

if(nums[i]< min) min = nums[i];

if(nums[i]> max) max = nums[i];

}

System.out.println(“Min and max: ” + min + ” ” + max);

}

}

 

 

Ví dụ 5: Sắp xếp mảng dùng phương pháp sắp xếp nổi bọt (Bubble Sort)

class BubbleSort

{

public static void main(String args[])

{

int nums[] = { 99, -10, 100123, 18, -978, 5623, 463, -9, 287, 49 };

int a, b, t;

int size;

size = 10; // number of elements to sort

// display original array

System.out.print(“Original array is:”);

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

System.out.print(” ” + nums[i]);

 

System.out.println();

// This is the Bubble sort.

for(a=1; a < size; a++)

for(b=size-1; b >= a; b–)

{

if(nums[b-1] > nums[b])

{          // if out of order

// exchange elements

t = nums[b-1];

nums[b-1] = nums[b];

nums[b]= t;

}

}

// display sorted array

System.out.print(“Sorted array is:”);

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

System.out.print(” ” + nums[i]);

 

System.out.println();

}

}

 

Ví dụ 6: Nhập và xuất giá trị của các phần tử trong một mảng hai chiều.

class TwoD_Arr

{

public static void main(String args[])

{

int t, i;

int table[][] = new int[3][4];

for(t=0; t < 3; ++t)

{

for(i=0; i < 4; ++i)

{

table[t][i]= (t*4)+i+1;

System.out.print(table[t][i]+ ” “);

}

            System.out.println();

}

}

}

Biên soạn: txthanh – apps1pro.com

Share.

About Author

Leave A Reply