Sunday, 20 September 2020

Java: Làm việc với Mảng trong

Cấu trúc dữ liệu Mảng

+     Mảng là một cấu trúc dữ liệu, tại đó chúng ta có thể lưu trữ các phần tử tương tự nhau. Thông thường, 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ề

+    Trong Java, mảng có thể được hiểu là MẢNG ĐỘNG, nghĩa là ta không cần phải khai báo/xác định trước kích thước tối đa của mảng. 

+   Mảng trong Java là dựa trên chỉ mục (index), phần tử đầu tiên của mảng được lưu trữ tại chỉ mục 0.

Lợi thế của mảng trong Java

+   Tối ưu hóa code: từ đó chúng ta có thể thu nhận và sắp xếp dữ liệu một cách dễ dàng.

+   Truy cập ngẫu nhiên: chúng ta có thể lấy bất cứ dữ liệu nào ở tại bất cứ vị trí chỉ mục nào.

Các kiểu mảng trong JavaCó hai kiểu mảng trong Java, đó là:

    +     Mảng một chiều

    +     Mảng đa chiều. (thực chất mảng m chiều ta đều có thể quy về Mảng của  mảng m-1 chiều.               Vì vậy, mục này ta chỉ nghiên cứu và làm việc với Mảng 2 chiều.


Quy trình làm việc với mảng trong Java

Bước 1: Khai báo đối tượng mảng

Mảng 1 chiều:

§  <Kiểu dữ liệu>[] <Biến mảng>;

§  <Kiểu dữ liệu> <Biến mảng>[];

Ví dụ: int[] A, B, C;   // => A, B, C đều là mảng các số nguyên.

int X[], Y, Z[] ; // chỉ X và Z là mảng; Y là biến thường

Mảng 2 chiều:

§  <Kiểu dữ liệu>[][] <Biến mảng>;

§  <Kiểu dữ liệu>[] <Biến mảng>[];

§  <Kiểu dữ liệu> <Biến mảng>[][];

 Ví dụ: double[][] M ;


Bước 2: Nhập kích thước mảng:

Mảng 1 chiều: Nhập 1 số nguyên (m)        // Số phần tử

Mảng 2 chiều: Nhập 2 số nguyên (h, c)     // Số hàng, số cột

 

                 Ví dụ, nhập với đối tượng thuộc lớp Scanner

(Scanner sc = new Scanner(System.in);)

 

Nhập số nguyên:

m = sc.nextInt();                                   // Ví dụ: m=100;

h = sc.nextInt();     c = sc.nextInt();      // Ví dụ: h=3; c=4

Nhập số thực: sc.nextDouble();

 

Bước 3: Tạo lập đối tượng mảng

A = new int[m];                  // A là một mảng chứa m số nguyên int

M = new double[h][c];        // M là một mảng 2 chiều, chứa h*c số thực double


Bước 4: Truy cập mảng: Truy cập theo cú pháp

Mảng một chiều:      <Biến mảng>[chỉ_số];

Mảng 2 chiều:           <Biến mảng>[chỉ_số_hàng][chỉ_số_cột];

 

Trong đó: chỉ_số; chỉ_số_hàng; chỉ_số_cột là các số nguyên không âm; nhỏ hơn kích thước của chiều tương ứng. Nếu vi phạm điều này, sẽ xuất hiện ngoại lệ: ArrayIndexOutOfBoundsException

A[10] = 100; int c = 2 * A[6]; 

Double x = M[1][2] + c*M[2][2];

 

    • Ví dụ 1: Xây dựng chương trình Java thực hiện các công việc sau:
      1) Nhập vào một mảng (dãy số) gồm m số nguyên từ bàn phím.
      2) In ra dãy số đã nhập 
      3) Tìm và in ra giá trị lớn nhất của các phần tử trong dãy

      Hướng dẫn giải

      Input:
      + Số nguyên dương m (là số phần tử của dãy số)
      + m số nguyên, là giá trị các phần tử của dãy số

       Output (nhiệm vụ cần làm):

        + In ra dãy số đã nhập
        + Tìm và in ra giá trị lớn nhất của các phần tử thuộc dãy đã nhập ở trên
         Gợi ý (xây dựng code): Do yêu cầu không quá nhiều, có thể thực hiện trong hàm main

          + Số lớp cần xây dựng: 01 - là lớp chính - tên lớp đặt là DaySo
          + Các nội dung công việc triển khai trong hàm main
          + Tên file mã nguồn là: DaySo.java

      Code:

       // Tập tin: DaySo.java 
      /* Nhập vào một mảng (dãy số) gồm m số nguyên từ bàn phím.
        - In ra dãy số đã nhập 
        - Tìm và in ra giá trị lớn nhất của các phần tử trong dãy
       */

      import java.io.*;
      import java.util.Scanner;
      public class DaySo {
                      public static void main(String arg[]) {
                                      Scanner sc = new Scanner(System.in);
                                      int m;                      // Số phần tử của dãy số (Mảng 1 chiều)
                                     
                                      //Bước 1: Khai báo đối tượng mảng
                                      int A[];    // Mảng 1 chiều (Dãy số) các số nguyên
                                     
                                      //Bước 2: Nhập/xác định kích thước mảng
                                      System.out.print("Nhap so phan tu :"); 
                                      m = sc.nextInt();   // Nhập 1 số nguyên (lưu ý: phương thức này chưa được xử lý ngoại lệ)
                                     
                                      // Bước 3: Tạo lập đối tượng mảng
                                      A = new int[m];
                                     
                                      // Bước 4: Truy cập mảng
                                      //Nhập giá trị cho các phần tử của dãy số
                                      for(int i=0;i<m;i++) {
                                                      System.out.print("A["+i+"] = ");
                                                      A[i] = sc.nextInt();
                                      }
                                     
                                      // In ra giá trị mảng đã nhập trên 1 dòng; mỗi phần tử cách nhau 1 dấu TAB
                                      System.out.println("\n===== MẢNG ĐÃ NHẬP ===== ");
                                      for(int i=0;i<m;i++) System.out.print(A[i] + "\t");
                                     
                                      // Tìm max
                                      int max=A[0];
                                      for(int j=1;j<m;j++) 
                                                      if(max < A[j]) max = A[j]; // Nếu max < A[j] thì cập nhật lại giá trị của max
                                      System.out.println("\n\n =====> Giá trị Max = " + max);
                      }
      }

      Demo kết quả thực hiện 


       

No comments:

Post a Comment