Công ty CÔNG TY TNHH J.O.H.N CAPITAL tuyển Trưởng Nhóm/ Leader Marketing Mảng Thương Mại Điện Tử, Thu Nhập Upto 35Tr tại Hà Nội, Hà Đông, lương 25-35 triệu, kinh nghiệm 2 năm, kỹ năng - Hỗ trợ cấp trên trong việc xây dựng các chiến lược marketing, R&D nâng cấp các sản phẩm Ở bài viết này JackV sẽ hướng dẫn các bạn 3 kỹ thuật random thường dùng: 1. Random tự nhiên, có thể lặp lại. 2. Random có thể lặp lại nhưng 2 phần tử liên tiếp không trùng nhau. 3. Random không lặp lại. Các bạn có thể random các phần tử trong một danh sách theo cách này, ở đây mình sẽ làm Cú pháp, cách khai báo nhập xuất mảng một chiều trong Java (array) . Thao tác với mảng ứng dụng vào giải các bài tập liên quan trong thực tế! Giới thiệu về mảng trong Java. Định nghĩa: Mảng là tập hợp các phần tử có cùng kiểu dữ liệu, có vị trí liên tiếp nhau trong các Hãy nhớ rằng, Java sử dụng lập chỉ mục dựa trên số 0, nghĩa là, việc lập chỉ mục các mảng trong Java bắt đầu bằng 0 chứ không phải 1. Hãy lấy một ví dụ khác về mảng đa chiều. Lần này chúng ta sẽ tạo một mảng 3 chiều. Ví dụ, String [] [] [] data = new String [3] [4] [2]; Các thao tác trên mảng 1 chiều bằng đệ quy trong C. Nhập mảng ngẫu nhiên. Xuất mảng. Tính tổng các giá trị trong mảng. Tính trung bình cộng các giá trị chẳn trong mảng. Đếm xem trong mảng có bao nhiêu phần tử lẻ. Sắp xếp mảng tăng dần. Chèn tăng một giá trị X vào mảng . Trong bài trước, các bạn đã được tìm hiểu về mảng một chiều trong Java. Sang bài này, tôi sẽ giới thiệu đến các bạn một khái niệm mảng mới phức tạp hơn mảng một chiều, đó là khái niệm mảng hai chiều trong Java. Sau khi đã nắm được phần lý thuyết tôi đã trình bày trong bài này thì tôi sẽ đưa ra một số bài tập để các bạn luyện viết này được đăng tại không được copy dưới mọi hình thức. 1. Mảng hai chiều trong Java Như đã nói trong bài trước, mảng hai chiều là mảng có 2 chỉ số để lưu trữ các giá trị chẳng hạn giá trị của một bảng có m dòng, n cột. Sau đây chúng ta sẽ đi tìm hiểu chi tiết về nội dung của bài học này. Cú pháp khai báo mảng Tương tự như khai báo mảng 1 chiều, cú pháp khai báo mảng 2 chiều có 2 dạng như sau Dạng 1Bài viết này được đăng tại [free tuts .net] [Kiểu_dữ_liệu] Tên_mảng[][]; Dạng 2 [Kiểu_dữ_liệu][][] Tên_mảng; trong đó [Kiểu_dữ_liệu] mô tả kiểu của mỗi phần tử thuộc mảng như int, char, double, String,..., tên_mảng là tên của mảng và quy tắc đặt tên phải tuân theo quy tắc đặt tên biến trong Java. Ví dụ int a[][]; khai báo mảng hai chiều a có kiểu dữ liệu là int. Cấp phát bộ nhớ cho mảng Để cấp phát bộ nhớ cho mảng 2 chiều thì chúng ta sử dụng từ khóa new, trong đó [Số_dòng], [Số_cột] là hai số nguyên dương chỉ ra số lượng dòng và số lượng cột của mảng hai chiều và trong Java có 2 cách để cấp phát bộ nhớ như sau Cách 1[Kiểu_dữ_liệu] Tên_mảng[][] = new [Kiểu_dữ_liệu] [Số_dòng][Số_cột]; Ví dụ khai báo và cấp phát bộ nhớ cho mảng number có 2 dòng, 3 cột int number[][] = new int[2][3]; Cách 2 [Kiểu_dữ_liệu][][] Tên_mảng = new [Kiểu_dữ_liệu] [Số_dòng][Số_cột]; Ví dụ khai báo và cấp phát bộ nhớ cho mảng A có 3 dòng, 5 cột String[][] A = new String[3][5]; Khi trình biên dịch gặp lệnh trên thì nó sẽ cấp phát vùng nhớ để chứa mảng hai chiều có 3 dòng, 5 cột với số phần tử trong mảng = số dòng * số cột = 15. Hình ảnh minh họa của mảng hai chiều trên như là một bảng gồm có các dòng và các cột như sau Bản chất của mảng 2 chiều là mỗi dòng của nó chính là một mảng một chiều. Ví dụ với mảng hai chiều a có 3 dòng, 5 cột, mỗi phần tử của mảng có kiểu int thì a được xem như mảng một chiều có 3 phần tử, mỗi phần tử này là một mảng một chiều có 5 phần tử. Ngoài ra, Java còn cho phép chúng ta vừa có thể khai báo mảng và vừa khởi tạo giá trị cho mảng. Ví dụ để khai báo mảng một chiều có tên là diem, kiểu dữ liệu là int và mảng này chứa 6 phần tử có giá trị lần lượt là 1, 2, 3, 4, 5, 6 thì chúng ta làm như sau // khai báo một mảng 2 chiều có 3 dòng và 2 cột int diem[][] = {{1, 2}, {3, 4}, {5, 6}}; Bảng dưới đây minh họa mảng hai chiều trên Dòng Cột 0 1 0 1 2 1 3 4 2 5 6 Truy xuất các phần tử của mảng Mỗi phần tử của mảng 2 chiều được truy xuất thông qua tên mảng cùng với chỉ số dòng và chỉ số cột của phần tử đó. Tương tự như mảng một chiều, nếu một mảng hai chiều có m dòng và n cột thì chỉ số của dòng sẽ chạy từ 0, 1, 2,..., m - 1 và chỉ số của cột sẽ chạy từ 0, 1, 2,..., n - 1. Cú pháp như sau Tên_mảng[Chỉ_số_dòng][Chỉ_số_cột] Ví dụ Để truy cập đến phần tử nằm ở dòng 2, cột 1 của mảng diem được khai báo ở trên thì chúng ta làm như sau public static void mainString[] args { // khai báo một mảng 2 chiều có 3 dòng và 2 cột int diem[][] = {{1, 2}, {3, 4}, {5, 6}}; tử nằm ở dòng 2 và cột 1 trong mảng diem là " + diem[2][1]; } Nhìn vào bảng minh họa bên trên thì chúng ta nhận thấy phần tử nằm ở dòng 2 và cột 1 trong bảng diem là 6. Kết quả biên dịch chương trình cũng cho chúng ta thấy được điều đó 2. Nhập xuất các phần tử cho mảng Chương trình dưới đây sẽ minh họa cách nhập các phần tử cho mảng hai chiều từ bàn phím và sau đó hiển thị các phần tử đó ra màn hình. Ví dụ public static void mainString[] args { // khai báo số dòng và số cột cho mảng int soDong, soCot; Scanner scanner = new Scanner vào số dòng của mảng "; soDong = vào số cột của mảng "; soCot = // khai báo và cấp phát bộ nhớ cho mảng int[][] A = new int[soDong][soCot]; // Để nhập giá trị các phần tử cho mảng // chúng ta sẽ sử dụng 2 vòng lặp for // vòng lặp for bên ngoài sẽ duyệt i từ 0 đến soDong - 1 // và vòng lặp for bên trong sẽ duyệt j từ 0 đến soCot - 1 // mỗi lần như vậy thì sẽ nhập vào phần tử tại vị trí i, j for int i = 0; i soPhanTuKhac0 { trận vừa nhập là ma trận thưa"; } else { trận vừa nhập là ma trận không thưa"; } } Kết quả sau khi biên dịch chương trình Ví dụ 3 Một ma trận được gọi là ma trận đối xứng trước hết nó phải là ma trận vuông có số dòng và số cột bằng nhau và các phần tử của nó đối xứng nhau qua đường chéo chính. Viết chương trình nhập từ bàn phím các phần tử của ma trận A, kích thước m dòng, n cột 1 <= m, n <= 5. Kiểm tra xem ma trận vừa nhập có phải là ma trận đối xứng hay không? Hướng dẫn Giả sử chúng ta có một ma trận vuông có 3 dòng, 3 cột thì chúng ta gọi ma trận này là ma trận vuông bậc 3. Hình dưới đây minh họa đường chéo phụ và đường chéo chính như sau Các phần tử nằm trên đường chéo chính có đặc điểm chỉ số dòng bằng chỉ số cột. Ví dụ trong hình trên chúng ta thấy có các phần tử nằm trên đường chéo chính như a11, a12,..., ann, các phần tử này được gọi là các phần tử chéo. Để kiểm tra ma trận A có phải là ma trận đối xứng hay không thì cần thực hiện các bước sau Ma trận A nhập vào phải luôn luôn là một ma trận vuông. Kiểm tra phần tử nằm dưới đường chéo chính có bằng phần tử đối xứng với nó qua đường chéo chính hay không tức là kiểm tra các phần tử A[i][j] có bằng A[j][i] không, với i, j chạy từ 0 đến n. Bài giải public static void mainString[] args { int n; // bậc của ma trận int kt = 0; Scanner scanner = new Scanner do { vào số bậc của ma trận "; n = } while n < 1; // ma trận A là ma trận vuông // có n dòng và n cột int[][] A = new int[n][n]; các phần tử cho ma trận A"; for int i = 0; i < n; i++ { for int j = 0; j < n; j++ { + i + "," + j + "] = "; A[i][j] = } } trận A vừa nhập"; for int i = 0; i < n; i++ { for int j = 0; j < n; j++ { + "\t"; } } // kiểm tra các phần tử nằm dưới đường chéo chính // và phần tử đối xứng với nó qua đường chéo chính // có bằng nhau hay không // nếu bằng nhau thì ma trận đó là ma trận đối xứng for int i = 0; i < n; i++ { for int j = 0; j < i; j++ { if A[i][j] == A[j][i] { kt = 1; } else { kt = 0; } } } if kt == 1 { trận vừa nhập là ma trận đối xứng"; } else { trận vừa nhập là ma trận không đối xứng"; } } Giải thích hoạt động của chương trình trên như sau Giả sử khi biên dịch chương trình, tôi nhập vào một ma trận vuông bậc 3 như sau 3 1 2 1 0 3 2 3 0 Thì chúng ta thấy các phần tử nằm trên đường chéo chính bao gồm 3 phần tử đó là A00 = 3, A11 = 0 và A22 = 0. Hoạt động của vòng lặp for kiểm tra mảng đó có phải là mảng đối xứng trải qua các bước như sau Bước 1 Khởi tạo i = 0 < n nhưng j = 0 = i nên không thực hiện lệnh trong thân vòng lặp for. Bước 2 Tăng i lên 1, lúc này i = 1 < n và j = 0 < i nên thực hiện lệnh trong thân vòng lặp for thì thấy A[1][0] = A[0][1] = 1 nên lúc này biến kt = 1. Bước 3 Tăng j lên 1, lúc này j = 1 = i nên không thực hiện lệnh trong thân vòng lặp for. Bước 4 Quay lại vòng lặp for, lúc này i = 2 < n và j = 0 < i nên thực hiện lệnh trong thân vòng lặp for thì thấy A[2][0] = A[0][2] = 2 nên lúc này biến kt = 1. Bước 5 Tăng j lên 1, lúc này j = 1 < i nên thực hiện lệnh trong thân vòng lặp for thì thấy A[2][1] = A[1][2] = 3 nên lúc này biến kt = 1. Bước 6 Tăng j lên 1, lúc này j = 2 = i nên không thực hiện lệnh trong thân vòng lặp for. Bước 7 Tăng i lên 1, lúc này i = 3 = n nên kết thúc vòng lặp for. Bước 8 Sau khi ra khỏi vòng lặp for thì lúc này biến kt = 1 nên sẽ hiển thị thông báo "Ma trận vừa nhập là ma trận đối xứng" ra màn hình. 4. Hạn chế của mảng Vì khi khai báo mảng, chúng ta cần phải khai báo kích thước cố định cho mảng nên sẽ xảy ra 2 trường hợp như sau Nếu khai báo mảng với kích thước lớn mà không sử dụng hết sẽ gây lãng phí bộ nhớ, ngược lại nếu khai báo mảng với kích thước quá nhỏ thì chúng ta sẽ không thể mở rộng mảng được. Vì các phần tử trong mảng được sắp xếp liên tục nên việc chèn hoặc xóa một phần tử trong mảng cũng sẽ gặp nhiều khó khăn. 5. Lời kết Đây là bài cuối cùng về mảng và cũng là bài cuối cùng trong chương Chuỗi và mảng. Sang chương sau, chúng ta sẽ bước sang tìm hiểu một khái niệm mới dùng để giải quyết những hạn chế của mảng - đó là khái niệm Collections Tập hợp trong Java. Các bạn theo dõi nhé! This entry is part 10 of 31 in the series Tự học lập trình JavaBài viết hôm nay mình sẽ giới thiệu cho các bạn hiểu và biết cách sử dụng mảng một chiều trong java. Mảng là một tập hợp các phần tử có kiểu tương tự nhau mà có vị trí ô nhớ liền kề. Mảng trong Java là một đối tượng chứa các phần tử có kiểu dữ liệu giống nhau. Cách khai báo [kiểu dữ liệu] [] [tên mảng] ; Ví dụ public class Test { public static void mainString[] args{ int []a; }} Ngoài ra bạn có thể khai báo theo cách sau [kiểu dữ liệu] [tên mảng] []; Cách khai báo này giống như cách khai báo mảng trong C/C++. Nhưng mình khuyên các bạn không nên khai báo theo cách này. Tạo mảng một chiều trong java Các bạn có thể khởi tạo mảng bằng cách dùng từ khóa new bằng cú pháp [kiểu_dữ_liệu] [] [tên_mảng] = new [kiểu_dữ_liệu] [kích_thước_mảng] ; Bằng cú pháp này bạn vừa khai báo mảng vừa khởi tạo mảng. Nếu bạn khai báo mảng rồi thì có thể khởi tạo mảng bằng cú pháp sau. [tên_mảng] = new [kiểu_dữ_liệu] [kích_thước_mảng]; Các bạn xem qua ví dụ public class Test { public static void mainString[] args{ int []a;//khai báo mảng a = new int [5];//khởi tạo mảng }} Các bạn có thể truy cập đến phần tử của mảng bằng cú pháp Các bạn lưu ý là mảng bắt đầu bằng từ phần tử 0 đến kích_thước_mảng -1. Mảng một chiều trong java public class Test { public static void mainString[] args{ int []a; a = new int [5]; forint i=0;i< a[i] = i; } }} Trong ví dụ trên i chạy từ 1 đến 4 và lần lượt gán giá trị của chính nó cho phần tử thứ i của mảng. Chúng ta dùng thuộc tính length để xác định kích thước mảng. Chúng cùng in giá trị của mảng a ra màn hình public class Test { public static void mainString[] args{ int []a; a = new int [5]; forint i=0; i< a[i] = i; } forint i=0;i < 5;i++{ tri cua a"+i+" la "+a[i]; } }} Gia tri cua a0 la 0Gia tri cua a1 la 1Gia tri cua a2 la 2Gia tri cua a3 la 3Gia tri cua a4 la 4 Thay vì bạn viết forint i ;i < kích_thước_mảng ; i++ thì java hỗ trợ một vòng lặp foreach cho phép chúng ta duyệt qua tất cả các phần tử của mảng. Cú pháp for kiểu_dữ_liệu tên_biến tên_mảng { //khối lệnh } Trong đó tên_biến được khai báo mới, mà là một kiểu tương thích với các phần tử của mảng bạn đang truy cập. Biến này sẽ là có sẵn trong khối for và giá trị của nó sẽ là giống như phần tử mảng hiện tại. Cùng xem qua ví dụ public class Test { public static void mainString[] args{ float a[] = {4,5,6,8};//Khởi tạo mảng a gồm 4 phần tử for float i a { In ra các giá trị a[i] } }} Ở đây mình đã khởi tạo sẵn một mảng float có các giá trị { } . Biến i được xem như một a[i] và các bạn có thể thao tác với nó. Bài viết của mình đến đây là kết thúc. Trong bài này, chúng ta sẽ tìm hiểu cách nhập và xuất cơ bản trong Java. Để xuất thì chúng ta có thể sử dụng hàm print, để nhập thì sử dụng đối tượng của lớp Java, chúng ta có thể sử dụng các hàm bên dưới để xuất dữ liệu ra màn hoặc hoặc Ví dụclass Main { public static void mainString[] args { programming is interesting."; } } Kết quảJava programming is khác nhau giữa các hàm println, print và printfprint in ra một chuỗi bên trong dấu ngoặc kép “”println in ra một chuỗi giống như hàm print. Sau đó, tự động xuống dòng in ra chuỗi với việc cung cấp các định dạng khác nhau giống như hàm printf trong C/C++.Ví dụ hàm print và printlnclass Main { public static void mainString[] args { println "; println "; print "; print"; } } Kết quả1. println 2. println 1. print 2. Print Một số ví dụ xuất trong Java khácclass Main { public static void mainString[] args { Double number = am " + "awesome."; = " + number; } } Kết quả5 I am awesome. Number = Các hàm xuất trong Java có thể xuất số, ký tự, chuỗi, giá trị của biến. Có thể dùng toán tử +’ để nối 2 chuỗi và xuất ra màn Nhập input trong JavaTrong Java, chúng ta có thể sử dụng đối tượng của lớp Scanner để lấy giá trị được nhập vào bởi người tiên, cần import gói đó, cần tạo một đối tượng của lớp Scanner. Đối tượng này sẽ giúp chúng ta lấy giá trị nhập vào của người dùng.// create an object of Scanner Scanner input = new Scanner // take input from the user int number = Các phương thức của lớp ScannerPhương thứcMô tảnextByteĐọc một số nguyên kiểu bytenextShortĐọc một số nguyên kiểu shortnextIntĐọc một số nguyên kiểu intnextLongĐọc một số nguyên kiểu longnextFloatĐọc một số kiểu floatnextDoubleĐọc một số kiểu doublenextĐọc một string kết thức trước một ký tự trắngnextLineĐọc một line of text kết thúc bằng phím EnterMột số ví dụ nhập trong Java sử dụng lớp Scannerimport class Main { public static void mainString[] args { Scanner input = new Scanner an integer "; int number = entered " + number; // Getting float input float "; float myFloat = entered = " + myFloat; // Getting double input double "; double myDouble = entered = " + myDouble; // Getting String input text "; String myString = entered = " + myString; // closing the scanner object } } Kết quảEnter an integer 21 You entered 21 Enter float Float entered = Enter double Double entered = Enter text HelloJava! Text entered = HelloJava! Lưu ý Chúng ta nên gọi hàm close để đóng đối tượng Scanner khi không sử dụng nữa. Kiểm tra validation dữ liệu trong html form với PHP Lập trình giao tiếp cảm biến DHT với board mạch Arduino Chương trình tính giai thừa factorial trong Java Hàm function và cách xây dựng hàm trong Python Thread là gì? Cách tạo Thread trong JavaJava programmingĐiều hướng bài viết Mảng trong Java là một đối tượng chứa các phần tử có kiểu dữ liệu giống nhau. Mảng là một cấu trúc dữ liệu nơi lưu trữ các phần tử giống nhau. Với mảng trong java chúng ta chỉ có thể lưu trữ một tập các phần tử có số lượng phần tử cố định. Mảng trong Java Thông thường, mảng array là một tập hợp các phần tử có cùng kiểu được lưu trữ gần nhau trong bộ nhớ. Mảng trong java lưu các phần tử theo chỉ số, chỉ số của phần tử đầu tiên là 0. Dưới đây là hình ảnh mô tả một mảng một chiều, chúng ta sẽ tìm hiểu kỹ ở phần dưới nhé. Mảng 1 chiều trong Java Khai báo Cú pháp khai báo Kiểu_dữ_liệu tên_mảng[]; Khai báo một con trỏ mảng Kiểu_dữ_liệu []tên_mảng; tương tự như trên Kiểu_dữ_liệu tên_mảng[] = new Kiểu_dữ_liệu[Số_lượng_phần_tử]; Tạo ra một mảng có spt phần tử Trong cú pháp trên thì Kiểu dữ liệu gồm kiểu nguyên thủy, kiểu đối tượng… nó xác định kiểu dữ liệu của từng phần tử của mảng. Số phần tử là số lượng phần tử của mảng và là một số nguyên Mảng trong Java là một đối tượng Cũng như các đối tượng khác, mảng phải được tạo ra bằng toán tử `new` như sau Tên_mảng = new Kiểu_dữ_liệu[spt]; Khi mảng được tạo ra thì mỗi phần tử của mảng sẽ nhận một giá trị mặc định, quy tắc khởi tạo giá trị cho các phần tử của mảng cũng chính là quy tắc khởi đầu giá trị cho các thuộc tính của đối tượng, tức là mỗi phần tử của mảng sẽ nhận giá trị 0 - đối với kiểu number, '\0' - đối với kiểu dữ liệu là ký tự, false - đối với kiểu dữ liệu boolean, null - nếu kiểu dữ liệu là một lớp nào đó Khai báo một mảng số nguyên gồm 100 phần tử // Cách 1 int mangInt[]; // Khai báo một con trỏ đến mảng các số nguyên mangInt = new int[100]; // Tạo ra mảng // Cách 2 int mangInt[]=new int[100]; Giả sử ta có lớp SinhVien đã đươc định nghĩa, hãy khai báo một mảng gồm 100 đối tượng của lớp SinhVien SinhVien arraySinhVien[] = new SinhVien[100]; Lúc này mỗi phần tử của mảng arraySinhVien là một con trỏ của lớp SinhVien và hiện giờ mỗi phần tử của mảng đang trỏ đến giá trị null. Để khởi tạo từng phần tử của mảng ta phải làm như sau arraySinhVien[0]=new SinhVien"sv01", "Nguyễn Văn An", "Hưng Yên"; arraySinhVien[1]=new SinhVien"sv02", "Nguyễn Thị Bình", "Bắc Giang"; …. arraySinhVien[99]=new SinhVien"sv100", "Đào Thị Mến", "Hà Nam"; Ngoài cách khai báo trên Java còn cho phép ta kết hợp cả khai báo và khởi gán các phần tử của mảng theo cách sau tạo ra một mảng gồm 5 phần tử, các phần tử của mảng lần lượt được gán các giá trị là 1, 3, 5, 7, 9 // Với trường hợp là số int[] mangInt = {1, 3, 5, 7, 9}; // Với trường hợp là object SinhVien[] mangSinhVien = { new SinhVien"sv01", "Nguyễn Văn A", "HY", new SinhVien"sv02", "Nguyễn Thị B", "HN", new SinhVien"sv03", "Đỗ Thị Q", "BG", null }; Khai báo một mảng gồm 4 phần tử, giá trị của các phần tử lần lượt được khởi gán như sau mangSinhVien [0]=new SinhVien"sv01", "Nguyễn Văn A", "HY" mangSinhVien [1]=new SinhVien"sv02", "Nguyễn Thị B", "HN" mangSinhVien [2]=new SinhVien"sv03", "Đỗ Thị Q", "BG" mangSinhVien [3]=null Truy xất đến các phần tử của mảng một chiều Để truy xuất đến phần tử thứ ind của mảng ta sử dụng cú pháp như sau Tên_mảng[Vị_trí_của_phần tử] Phần tử đầu tiên của mảng có chỉ số là 0 int a[] = new int [3]; // Khai báo và tạo ra mảng gồm 3 phần tử Lúc này các phần tử của mảng lần lượt được truy xuất như sau Phần tử đầu tiên của mảng là a[0] Phần tử thứ 2 của mảng là a[1] Phần tử thứ 3 đồng thời là phần tử cuối cùng của mảng là a[2] Truy cập các phần tử của một mảng trong Java public class Thaycacac { public static void mainString[] args { String[] cars = { "Honda", "BMW", "Ford", "Mazda" }; } } Thay đổi một phần tử mảng trong Java Để thay đổi giá trị của một phần tử cụ thể, hãy gán lại giá trị dựa vào vị trí của phần tử trong mảng public class TruyCapArray2 { public static void mainString[] args { String[] cars = { "Honda", "BMW", "Ford", "Mazda" }; // thay đổi phần tử đầu tiên của mảng cars cars[0] = "Morning"; // hiển thị phần tử đầu tiên của mảng cars tử đầu tiên " + cars[0]; } } Phần tử đầu tiên Morning Lấy về số phần tử hiện tại của mảng trong java Mảng trong Java là một đối tượng, do vậy nó cũng có các thuộc tính và các phương thức như các đối tượng khác. Để lấy về số phần tử của mảng ta sử dụng thuộc tính length như sau public class Thaycacac { public static void mainString[] args { String[] cars = { "Honda", "BMW", "Ford", "Mazda" }; dài của mảng cars là " + } } Độ dài của mảng cars là 4 Duyệt các phần tử của mảng trong Java Sử dụng vòng lặp for bạn có thể lặp qua các phần tử mảng bằng vòng lặp for và sử dụng thuộc tính length để chỉ định số lần vòng lặp sẽ chạy. public class Thaycacac { public static void mainString[] args { String[] cars = { "Honda", "BMW", "Ford", "Mazda" }; for int i = 0; i arr[i] { min = arr[i]; } } public static void mainString args[] { int a[] = { 33, 3, 4, 5 }; mina;// truyền mảng tới phương thức } } Sao chép một mảng trong java Chúng ta có thể sao chép một mảng tới mảng khác bởi phương thức arraycopy của lớp System. Cú pháp của phương thức arraycopy public class Thaycacac { public static void mainString[] args { char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd' }; char[] copyTo = new char[7]; 2, copyTo, 0, 7; StringcopyTo; } } Mảng nhiều chiều Khai báo Khai báo mảng N chiều trong Java được tiến hành như sau Hoặc Trong đó KDL gồm kiểu nguyên thủy, kiểu đối tượng… nó xác định kiểu dữ liệu của từng phần tử của mảng. sp1, sp2, …, sptN lần lượt là số phần tử trên chiều thứ 1, 2, .., N // Khai báo một con trỏ của mảng 2 chiều int[][] a; int a[][]; // Cách khác để khai báo một con trỏ của mảng 2 chiều // Khai báo và tạo ra mảng 2 chiều Ma trận gồm 2 hàng, 3 cột int[][] a = new int[2][3]; // Khai báo và khởi gán giá trị cho các phần tử của mảng 2 chiều int a[][]={ {1, 2, 5}. //Các phần tử trên hàng thứ nhất {2, 4, 7, 9}. //Các phần tử trên hàng thứ hai {1, 7}. //Các phần tử trên hàng thứ ba } Khai báo trên sẽ tạo ra một mảng hai chiều gồm 3 hàng, nhưng trên mỗi hàng lại có số phần tử khác nhau, cụ thể là trên hàng thứ nhất có 3 phần tử, hảng 2 gồm 4 phần tử và hàng thứ 3 gồm 2 phần tử. Với khai báo trên nếu ta liệt kê các phần tử của mảng theo trình tự từ trái qua phải và từ trên xuống dưới thì các phần tử lần lượt là a[0][0], a[0][1], a[0][2], a[1][0], a[1][1], a[1][2], a[1][3], a[2][0], a[2][1] Truy xuất đến phần tử mảng nhiều chiều khai báo và khởi tạo mảng đa chiều trong java public class TestArray3 { public static void mainString args[] { // khai báo và khởi tạo mảng 2 chiều int arr[][] = { { 1, 2, 3 }, { 2, 4, 5 }, { 4, 4, 5 } }; // in mảng 2 chiều r màn hình for int i = 0; i < 3; i++ { for int j = 0; j < 3; j++ { + " "; } } } } Sử dụng 2 vòng lặp for lồng nhau để duyệt đến từng phần tử với chỉ số dòng và cột trong mảng 2 chiều. Sau đó, nhập hoặc xuất mảng 2 chiều với các phần tử class Main { public static void mainString[] args { int[][] matrix = new int[3][4]; Scanner input = new Scanner "+ + " dong va " + matrix[0].length + " cot cua matrix"; forint row = 0; row < ; row++ { forint column = 0; column < matrix[row].length; column++ { matrix[row][column] = } } matrix co "+ + " dong va " + matrix[0].length + " cot"; forint row = 0; row < ; row++ { forint column = 0; column < matrix[row].length ; column++ { + " "; } } } } Kết quảNhap 3 dong va 4 cot cua matrix 1 2 3 0 4 5 6 9 7 2 5 5 Xuat matrix co 3 dong va 4 cot 1 2 3 0 4 5 6 9 7 2 5 5 Xuất mảng 2 chiều sử dụng vòng lặp for-eachclass Main { public static void mainString[] args { int[][] matrix = { {1, 2, 3, 0}, {4, 5, 6, 9}, {7, 2, 5, 5} }; //vòng lặp for-each đầu tiên truy cập đến mảng 1 chiều chứa các dòng for int[] innerArray matrix { //vòng lặp for-each truy cập đến từng phần tử trong các dòng forint data innerArray { + " "; } } } } Kết quả1 2 3 0 4 5 6 9 7 2 5 5 2. Tính tổng các phần tử trong mảng 2 chiềuSử dụng 2 vòng lặp for lồng nhau để duyệt qua từng phần tử trong mảng 2 chiều. Sau đó, cộng dồn các phần tử Main { public static void mainString[] args { int[][] matrix = { {1, 2, 3, 0}, {4, 5, 6, 9}, {7, 2, 5, 5} }; int total = 0; forint row = 0; row < row++ { forint column = 0; column < matrix[row].length; column++ { total += matrix[row][column]; } } cac phan tu trong matrix = " + total; } } Kết quảTong cac phan tu trong matrix = 493. Tính tổng các phần tử trong mảng 2 chiều theo cộtDuyệt theo số cột trước rồi dựa trên từng cột, cộng dồn các phần tử trong từng dòng tương ứng với cột Main { public static void mainString[] args { int[][] matrix = { {1, 2, 3, 0}, {4, 5, 6, 9}, {7, 2, 5, 5} }; forint column = 0; column < matrix[0].length; column++{ int total = 0; forint row = 0; row < row++{ total += matrix[row][column]; } for column " + column + " is " + total; } } } Kết quảSum for column 0 is 12 Sum for column 1 is 9 Sum for column 2 is 14 Sum for column 3 is 14 4. Tính tổng các phần tử trên đường chéo chính của ma trậnĐường chéo chính của một ma trận A bao gồm các phần tử Ai,j với i=j. Ba ma trận sau đây đều có đường chéo chính được biểu thị bởi các số 1 màu đỏBên dưới là một ma trận được biểu diễn bằng mảng 2 chiều. Các phần tử màu đỏ nằm trên đường chéo chính của ma trình tính tổng các phần tử trên đường chéo chính của ma trận trong Java như sauclass Main { public static void mainString[] args { int[][] matrix = { {1, 2, 3, 0}, {4, 5, 6, 9}, {7, 2, 5, 5} }; int total = 0; forint row = 0; row < row++ { forint column = 0; column < matrix[row].length; column++ { ifrow==column{ total += matrix[row][column]; } } } cac phan tu tren duong cheo chinh cua matrix = " + total; } } Kết quảTong cac phan tu tren duong cheo chinh cua matrix = 115. Mảng 2 chiều và phương thức trong Truyền mảng 2 chiều cho phương thức trong JavaMột mảng 2 chiều là tham số của phương thức thì là truyền tham chiếu. Các bạn có thể đọc lại bài Truyền tham trị và tham chiếu cho phương thức trong Java để hiểu rõ về truyền tham chiếu trong Main { public static void changeMatrixint[][] arr{ arr[0][0]=1; arr[0][1]=0; arr[0][2]=0; arr[0][3]=0; arr[1][0]=0; arr[1][1]=1; arr[1][2]=0; arr[1][3]=0; arr[2][0]=0; arr[2][1]=0; arr[2][2]=1; arr[2][3]=0; } public static void mainString[] args { int[][] matrix = { {1, 2, 3, 0}, {4, 5, 6, 9}, {7, 2, 5, 5} }; truoc khi goi ham changeMatrix"; forint row = 0; row < ; row++ { forint column = 0; column < matrix[row].length ; column++ { + " "; } } changeMatrixmatrix; sau khi goi ham changeMatrix"; forint row = 0; row < ; row++ { forint column = 0; column < matrix[row].length ; column++ { + " "; } } } } Kết quảMatrix truoc khi goi ham changeMatrix 1 2 3 0 4 5 6 9 7 2 5 5 Matrix sau khi goi ham changeMatrix 1 0 0 0 0 1 0 0 0 0 1 0 Rõ ràng, khi truyền mảng matrix vào hàm changeMatrix thì mảng matrix đã thay Kết quả trả về của một phương thức có thể là một mảng 2 chiềuclass Main { public static int[][] initMatrixint row, int col{ int[][] matrix = new int[row][col]; matrix[0][0]=1; matrix[0][1]=0; matrix[0][2]=0; matrix[0][3]=0; matrix[1][0]=0; matrix[1][1]=1; matrix[1][2]=0; matrix[1][3]=0; matrix[2][0]=0; matrix[2][1]=0; matrix[2][2]=1; matrix[2][3]=0; return matrix; } public static void mainString[] args { int row = 3; int col = 4; int[][] matrix; matrix = initMatrixrow, col; duoc khoi tao"; forint i = 0; i < ; i++ { forint j = 0; j < matrix[i].length ; j++ { + " "; } } } } Kết quảMatrix duoc khoi tao 1 0 0 0 0 1 0 0 0 0 1 0 Hàm initMatrix có kiểu trả về là mảng 2 chiều kiểu int. Thư viện cmath và một số hàm toán học thông dụng trong C++ Lập trình giao tiếp màn hình LCD với board mạch Arduino Các loại Thread trong Java Daemon Thread và User Thread Kỹ thuật cấp phát bộ nhớ động và minh họa với C++ Hàm đệ quy recursive function trong Python

nhập xuất mảng 1 chiều trong java