Tài liệu Java - Mảng

Mảng trên có mấy chiều? Các phần tử của mảng có chung đặc điểm gì? a. Màu sắc b. Hình dạng c. Số nguyên Trong java, mảng trên được khai báo như thế nào? Cấu trúc lệnh nào thường dùng để duyệt mảng? a. IF b. For c. While Tìm các số nguyên tố trong mảng trên?

pptx32 trang | Chia sẻ: thuychi16 | Lượt xem: 774 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Tài liệu Java - Mảng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Mảng72059301234aTên mảngGiá trịChỉ số phần tử mảngTrả lời câu hỏiMảng trên có mấy chiều?Các phần tử của mảng có chung đặc điểm gì?a. Màu sắc b. Hình dạng c. Số nguyênTrong java, mảng trên được khai báo như thế nào?Cấu trúc lệnh nào thường dùng để duyệt mảng?a. IF b. For c. WhileTìm các số nguyên tố trong mảng trên??NỘI DUNG MẢNGMảng một chiềuSao chép mảngMảng nhiều chiềuTìm kiếm phần tử trong mảng một chiềuSắp xếp các phần tử trong mảng một chiềuKiểu dữ liệu mảngJava có 2 kiểu dữ liệu cơ bản: Kiểu dữ liệu cơ sở: có 8 kiểuKiểu dữ liệu tham chiếu (hay dẫn xuất): có 3 kiểuKiểu mảngKiểu lớpKiểu giao tiếp (interface).Kiểu dữ liệu mảngKhái niệm: Mảng là tập hợp nhiều phần tử có cùng tên, cùng kiểu dữ liệu. Mỗi phần tử trong mảng được truy xuất thông qua chỉ số của nó trong mảng.Khai báo: []; hoặc [] ;VD: int[] iarray; hoặc int iarray[]; int[]  arrInt3, arrInt4, arrInt5;Kiểu dữ liệu mảngCấp phát bộ nhớ cho mảng:Không giống C, C++ Kích thước của mảng phải được xác định trước khi khai báo:VD: int arrInt[100]; //sẽ báo lỗiDùng từ khóa new để cấp phát bộ nhớ cho mảng. VD: int iarrInt = new int[100];Kiểu dữ liệu mảng Khởi tạo giá trị cho mảngCó thể khởi tạo giá trị ban đầu cho các phần tử của mảng khi nó được khai báo.VD: int[] arrInt = {1, 2, 3, 5, 6}; char[] arrChar = {‘a’, ‘b’, ‘c’};String arrString[] = {“Nguyen Van A”, “Tran Van B”};Chú ý: Luôn khởi tạo hoặc cấp phát mảng trước khi sử dụngMột số khai báo không hợp lệ: int[5] iarray; int iarray[5];Truy cập mảngChỉ số mảng trong Java bắt đầu từ 0. Vì vậy phần tử đầu tiên có chỉ số là 0, phần tử thứ n có chỉ số là n - 1.Các phần tử của mảng được truy xuất thông qua chỉ số của nó đặt giữa cặp dấu ngoặc vuông ([]).VD: int arrInt[] = {1, 2, 3}; int x = arrInt[0]; // x sẽ có giá trị là 1. int y = arrInt[1]; // y sẽ có giá trị là 2. int z = arrInt[2]; // z sẽ có giá trị là 3. Chiều dài mảng – số phần tử mảngLấy số phần tử mảng ta dùng lệnh tenmang.lengthVD: int a[]=new int[10]; int b[]={1,3,5}; Kết quả: a.length=10; b.length=3;Một số ví dụ về mảng//Nhập và xuất giá trị các phần tử của một mảng các số nguyên:public class ArrayDemo { public static void main(String[] args) { int arrInt[] = new int[10]; int i; for(i = 0; i max) max = nums[i]; } System.out.println("Min and max: " + min + " " + max); } }Một số ví dụ về mảngimport java.util.Scanner;public class BTMang { public static void main(String[] args) { Scanner input =new Scanner(System.in); int [] a = new int[5]; int i, j, tg; //nhap mang System.out.println("Nhap vao cac phan tu cua mang"); for(i=0;ia[j]){ tg=a[i]; a[i]=a[j]; a[j]=tg; } } System.out.print(a[i] + " "); } }}Một số ví dụ về mảngimport java.util.Scanner;public class BTMang2 { public static void Nhap(int[] a){ Scanner input =new Scanner(System.in); System.out.println("Nhap vao cac phan tu cua mang"); for(int i=0;ia[j]){ tg=a[i]; a[i]=a[j]; a[j]=tg; } } System.out.print(a[i] + " "); } }public static void main(String[] args) { }Một số ví dụ về mảngpublic static void main(String[] args) { int [] a = new int[5]; BTMang2 m2 = new BTMang2(); m2.Nhap(a); //in mang m2.In(a); m2.Sapxep(a); }}Sao chép mảngimport java.util.*;public class randomfile { public static void main(String[] args) { int[] s = {1,3,5,7,9,11,13,15}; int[] d = {2,4,6,8,10,12,14}; System.out.println(" mang d ban dau "); for(int i =0; i kết quả mảng d: phần tử 6,8,10,12 được thay bằng 7,9,11,13Sao chép mảngMảng nhiều chiềuKhai báo n chiều trong java [][]...[] ; hoặc [][]..[] Ví dụ khai báo mảng 2 chiều int a[][]; int[][] a;Mảng nhiều chiềuKhai báo 1 mảng kèm theo cấp phát bộ nhớ cho mảng n chiều [][]...[] = new [Số phần từ 1][Số phần tử 2].....[Số phần tử n]Ví dụ khai bào mảng 2 chiều (ma trận 2 hàng 3 cột) int a[][]=new int[2][3];Mảng nhiều chiềuTruy xuất đến phần tử của mảng nhiều chiều A ta dùng cú pháp A[n-1][m-1]...[k-1];Ví dụ truy xuất mảng 2 chiều int a[][]={ {3,4}, {2,8}, };Lúc đó: a[0][0]=3; a[0][1]=4; a[1][0]=2; a[1][1]=8;Lấy số dòng của mảng: ArrayName.lengthLấy số phần tử của dòng i: ArrayName[i].lengthVí dụ: Cho mảng sau: int[][] array = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};Khi đó: array.length cho kết quả là 4. array[0].length cho kết quả là 3 Độ dài mảng nhiều chiềuMột số ví dụ về mảng// Nhập và xuất giá trị của các phần tử trong một mảng hai chiềupublic class TwoD_Arr { public static void main(String[] args) { int t, i; int mang[][] = new int[3][4]; for(t=0; t < 3; ++t){ for(i=0; i < 4; ++i){ mang[t][i] = (t*4)+i+1; System.out.print(mang[t][i] + “ “); } System.out.println(); } }}Lớp java.util.ArraysCung cấp một số phương thức xử lý các mảng:public static int binarySearch(double[ ] a, double x )public static boolean equals( double[ ] a, double[] b)public static void fill( double[ ] a, double x)public static void fill( double[ ] a, int lo, int hi, double x)public static void sort( double[ ] a )Mỗi phương thức trên có cách thực hiện khác nhau cho các kiểu dữ liệu cơ sở (byte, short, int, long, float, double, char và boolean) và kiểu đối tượng.Tìm kiếm trong mảngTìm kiếm là quá trình tìm một phần tử xác định trong mảng. Ví dụ: Tìm một sinh viên trong danh sách SV.Tìm kiếm là một thao tác cơ bản trong lập trình. Có nhiều giải thuật và cấu trúc dữ liệu để tìm kiếm. Hai giải thuật cơ bản là: tìm kiếm tuyến tính (linear search) và tìm kiếm nhị phân (binary search).Tìm kiếm tuyến tínhPhương pháp tìm kiếm tuyến tính so sánh phần tử khóa key với mỗi phần tử trong mảng.Việc tìm kiếm sẽ kết thúc khi tìm thấy một phần tử mảng bằng key hoặc khi duyệt hết mảng mà không tìm thấy.Ví dụ minh họa: Tạo một mảng 2 chiều (7 x 9) có các phần tử là các số nguyên ngẫu nhiên nằm trong [0-1000) rồi hiển thị ra màn hình. Nhập số n từ bàn phím. Tìm kiếm và trả về số lần xuất hiện của tất cả các phần tử có giá trị bằng số vừa nhập vào. Nếu không tìm thấy thì in ra chuỗi “Khong tim thay!”.Tìm kiếm nhị phânĐể thực hiện được tìm kiếm nhị phân, các phần tử mảng phải được sắp xếp theo thứ tự tăng/giảm dần. Giả sử mảng được sắp xếp tăng dần: 2 4 7 10 11 45 50 59 60 66 69 70 79Tìm kiếm nhị phân Trước tiên so sánh giá trị cần tìm (key) với phần tử nằm giữa mảng. Có thể xảy ra 3 trường hợp sau:Nếu key bằng phần tử giữa ⇒ kết thúc vì tìm thấy.Nếu key nhỏ hơn phần tử giữa, lặp lại việc tìm key trong nửa đầu của mảng theo phương pháp nhị phân. Nếu key lớn hơn phần tử giữa, lặp lại việc tìm key trong nửa cuối của mảng theo phương pháp nhị phân.Tìm kiếm nhị phânTìm kiếm nhị phânViết chương trình tạo và nhập dữ liệu cho mảng 1 chiều có 10 phần tử kiểu int có giá trị tăng dần rồi in ra màn hình. Nhận một số từ bàn phím, tìm kiếm nhị phân rồi trả về vị trí của phần tử tìm được. Nếu không tìm thấy thì in ra chuỗi “Không tìm thấy!”.Sắp xếp mảngHoán đổi vị trí các phần tử trong mảng để có được một mảng trong đó các phần tử có thứ tự tăng/giảm dầnCó nhiều thuật toán có thể được dùng để sắp xếp:Chọn (selection sort): Tìm phần tử lớn trong mảng rồi đổi chỗ với phần tử cuối cùng của mảngNổi bọt (bubble sort): So sánh một phần tử với phần tử kế nó, nếu lớn hơn thì đổi chỗTrộn (Merge sort),Sắp xếp chọnSắp xếp nổi bọtViết chương trình cho phépNhập các phần tử mảng từ bàn phím.In mảngSắp xếp mảng tăng dần.Sắp xếp mảng giảm dần.Cho biết vị trị và giá trị phần tử lớn nhất, nhỏ nhất trong mảng.Cho biết mảng có bao nhiêu số nguyên tố, in ra danh sách các số nguyên tố.Cho biết mảng có bao nhiêu số hoàn hảo, in ra danh sách các số hoàn hảo.Cho phép thêm vào 1 phần tử ở đầu mảng, cuối mảng và ở vị tí bất kỳ (nhập từ bàn phím).Cho phép xóa một phần tử ở đầu mảng, cuối mảng và xóa ở vị trí bất kỳ (nhập từ bàn phím).Một số ví dụ về mảng