Bài giảng Lập trình Java cơ bản - Chương 10: Mảng

ppt 20 trang hapham 1750
Bạn đang xem tài liệu "Bài giảng Lập trình Java cơ bản - Chương 10: Mảng", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_lap_trinh_java_co_ban_chuong_10_mang.ppt

Nội dung text: Bài giảng Lập trình Java cơ bản - Chương 10: Mảng

  1. LẬPLẬP TRÌNHTRÌNH JAVAJAVA CƠCƠ BẢNBẢN Chương 10 MẢNG Lê Tân Bộ môn: Lập trình máy tính 1
  2. Nội dung chương 10 n Mảng một chiều n Ví dụ về khai báo và xử lý mảng n Mảng các đối tượng n Mảng và phương thức n Các dạng đặc biệt của xử lý mảng n Mảng hai chiều n Mảng nhiều chiều n Lớp Vector 2
  3. 10.1 Mảng một chiều n Mảng là một cấu trúc dữ liệu biểu diễn một tập hợp có thứ tự hữu hạn các phần tử cùng kiểu dữ liệu. n Là tập hợp nhiều phần tử có cùng tên, cùng kiểu dữ liệu và mỗi phần tử trong mảng được truy xuất thông qua chỉ số, ví dụ a[1], b[2][5]. n Kiểu mảng là kiểu tham chiếu. n Chỉ mục (hoặc chỉ số dưới) phải là kiểu số nguyên. n Phần tử đầu tiên có chỉ mục là 0, phần tử thứ hai có chỉ mục là 1 n Các phần tử được tự động gán giá trị khởi tạo là 0 (kiểu số), là false (kiểu boolean), và null đối với kiểu tham chiếu. n Mảng một chiều chỉ có một chỉ mục 3
  4. 10.1 Mảng một chiều n Khai báo mảng một chiều: DataType[] ArrayName; hoặc DataType ArrayName[]; • Trong đó DataType là kiểu dữ liệu của các phần tử mảng, ArrayName là tên biến mảng. n Tạo mảng: ArrayName = new DataType[num]; • Tạo mảng có num phần tử n Khai báo và tạo mảng trong cùng một lệnh: DataType[] ArrayName = new DataType[num]; n Ví dụ double[ ] salesAmt; //Khai báo mảng salesAmt = new double[6]; //Cấp phát 6 vị trí nhớ 4
  5. 10.1 Mảng một chiều 5
  6. 10.2 Ví dụ khai báo và xử lý mảng n Độ dài mảng: Là số các phần tử của mảng, lấy bằng cách gọi biến thể hiện (instance variable) length: arrayVariable.length n Ví dụ: n salesAmt.length trả về giá trị 6 n Khởi tạo các giá trị cho mảng: • Sử dụng vòng lặp, ví dụ: for (int i = 0; i < salesAmt.length; i++) salesAmt [i] = i; • Nhập giá trị cho mảng từ bàn phím, ví dụ: Scanner s = new Scanner(System.in); for (int i = 0; i < salesAmt.length; i++) salesAmt [i] = s.nextDouble(); n Khai báo, tạo, khởi tạo trong một lệnh: Ví dụ double[] myList = {1.9, 2.9, 3.4, 3.5}; 6
  7. 10.3 Mảng các đối tượng n Chỉ mục của mảng: có thể là biểu thức kiểu char, sort, byte, hoặc int. • Không được vượt quá giới hạn: giữa khoảng 0 và độ dài mảng trừ đi 1. n Mảng các đối tượng: Là mảng mà các phần tử của nó là các đối tượng n Tham chiếu đến một phần tử của mảng các đối tượng là đã thực hiện hai mức tham chiếu. • Tham chiếu đến phần tử mảng. • Tham chiếu đến đối tượng được tham chiếu bởi phần tử của mảng. 7
  8. 10.3 Mảng các đối tượng n Ví dụ khai báo mảng các chuỗi. String[ ] groceryItems = new String[10]; 8
  9. 10.4 Mảng và phương thức n Java sử dụng truyền tham trị (sao chép giá trị cần truyền vào các tham số) để truyền các tham số cho phương thức. • Tham số kiểu nguyên thủy: giá trị thực được truyền. • Tham số kiểu mảng: giá trị của tham số chứa một tham chiếu tới mảng; tham chiếu này được truyền n Ví dụ: Tính giá trị trung bình của một mảng public static double average ( int[ ] grades ) { int total = 0 ; for ( int i = 0 ; i < grades.length ; i++ ) total = total + grades[ i ] ; return (double) total / (double) grades.length ; } 9
  10. 10.5 Các dạng đặc biệt của xử lý mảng n Sao chép mảng: sử dụng vòng lặp, ví dụ int[ ] sourceArray = {2, 3, 1, 5, 10}; int[ ] targetArray = new int[sourceArray.length]; for (int i = 0; i < sourceArrays.length; i++) targetArray[i] = sourceArray[i]; n Tiện ích arraycopy sẽ sao chép giá trị từ mảng nguồn sourceArray, ở một vị trí bắt đầu src_pos, đến mảng đích targetArray, ở một vị trí bắt đầu tar_pos, với số phần tử cần sao chép là length. System.arraycopy(sourceArray, src_pos, targetArray, tar_pos, length); 10
  11. 10.5 Các dạng đặc biệt của xử lý mảng n Tìm max, min của mảng: sử dụng vòng lặp, ví dụ min = max = nums[0]; for(int i=1; i max) max = nums[i]; } 11
  12. 10.5 Các dạng đặc biệt của xử lý mảng n Sắp xếp mảng theo phương pháp nổi bọt (Bubble Sort) class BubbleSort{ public static void main(String args[]){ int nums[ ] = { 99, -10, 103, 18, -978, 5623, 463, -9, 287, 49 }; int a, b, t, size = 10; System.out.print("Original array is:"); for(int i=0; i = a; b ){ if(nums[b-1] > nums[b]){ // Hoán vị phần tử t = nums[b-1]; nums[b-1] = nums[b];nums[b] = t; } } System.out.print("Sorted array is:"); for(int i=0; i < size; i++) System.out.print(" " + nums[i]); } } 12
  13. 10.6 Mảng hai chiều n Mảng hai chiều là mảng được cấu trúc thành hai chiều n Mỗi phần tử được truy cập đến bởi hai chỉ mục n Khai báo mảng hai chiều: DataType[][] ArrayName; Hoặc: DataType ArrayName[][]; n Ví dụ: double[][] alpha; String[][] beta; int data[][]; n Tạo biến mảng hai chiều: ArrayName = new DataType [Expression1] [Expression2]; 13
  14. 10.6 Mảng hai chiều n Mảng gồ ghề: là mảng hai chiều, mỗi hàng có thể có độ dài khác nhau. Ví dụ: int[][] matrix = { {1, 2, 3, 4, 5}, {2, 3, 4, 5}, {3, 4, 5}, {4, 5}, {5} }; 14
  15. 10.6 Mảng hai chiều n Các trường độ dài: Có hai trường độ dài, trường thứ nhất biểu diễn số hàng của mảng, trường thứ hai biểu diễn số phần tử của hàng. Ví dụ int [ ] [ ] data = new int [ 6 ] [ 12 ] ; n Trường thứ nhất: data.length sẽ cho giá trị là số hàng của mảng data và bằng 6 n Trường thứ hai: data[2].length sẽ cho giá trị là số cột của mảng data (số phần tử của hàng thứ 2) và bằng 12 15
  16. 10.7 Mảng nhiều chiều n Định nghĩa mảng tổng quát: Mảng là một tập hợp các phần tử, tất cả đều có cùng một kiểu dữ liệu (hoặc lớp), và được cấu trúc thành N chiều (N >= 1). Mỗi phần tử của mảng được truy cập đến bởi N chỉ mục, mỗi chỉ mục biểu diễn vị trí của phần tử trong mỗi chiều. n Khai báo mảng nhiều chiều: 16
  17. 10.8 Lớp Vector n Lớp Vector có trong gói java.util. • Chức năng tương tự như của mảng. • Mảng là cấu trúc triển khai cơ bản được sử dụng trong lớp này. • Một Vector có thể lớn lên và nhỏ đi; kích thước của nó là không cố định trong thời gian sống của nó. n Các phép toán trên ma trận: Trong toán học, có nhiều bài toán, như các phép quay trong đồ hoạ, yêu cầu phép cộng, trừ, nhân, và chia hai ma trận. Thiết kế và triển khai lớp Matrix (lớp ma trận) tổng quát sẽ cung cấp các phép toán này cho các ma trận thực. 17
  18. 10.8 Lớp Vector 18
  19. 10.8 Lớp Vector n Ví dụ, để tạo ma trận chứa tích của hai ma trận 19
  20. Câu hỏi và bài tập 1. Khai báo và tạo một mảng quizAnswer chứa 12 phần tử được đánh chỉ mục bởi các số nguyên từ 0 đến 11. Kiểu dữ liệu của các phần tử là boolean. 2. Khai báo và tạo một mảng một chiều năm phần tử kiểu int có tên là oddNums bằng cách sử dụng một danh sách khởi tạo để chứa năm số lẻ, bắt đầu từ 1. 3. Tất cả các phần tử trong một mảng cần phải có cùng một kiểu dữ liệu, và số lượng các phần tử là cố định tại thời điểm tạo mảng, đúng hay sai? 4. Các phần tử của một mảng cần phải thuộc một kiểu nguyên thuỷ, đúng hay sai? 5. Hãy viết đoạn mã tìm giá trị lớn nhất trong một mảng hai chiều double gồm 50 hàng và 50 cột. 20