Xem thêm

Mảng một chiều trong Java

Huy Erick
Ảnh: Test PHP Giới thiệu chung về mảng Trong lập trình, mảng là kiểu dữ liệu có cấu trúc gồm một tập hợp cố định các phần tử có cùng kiểu dữ liệu. Mỗi phần...

Ảnh: Test PHP

Giới thiệu chung về mảng

Trong lập trình, mảng là kiểu dữ liệu có cấu trúc gồm một tập hợp cố định các phần tử có cùng kiểu dữ liệu. Mỗi phần tử của mảng được sử dụng như là một biến đơn, với kiểu dữ liệu của mảng chính là kiểu dữ liệu của phần tử. Trong Java, chúng ta có mảng một chiều và mảng hai chiều.

Đối với mảng một chiều trong Java, chúng ta cần quan tâm đến các thành phần sau:

  • Tên mảng, số phần tử của mảng, kiểu dữ liệu của mảng.

Mảng một chiều thường được sử dụng trong lập trình không chỉ vì tính đơn giản và dễ sử dụng, mà còn vì khả năng lưu trữ dữ liệu trong các bài toán thực tế. Chúng ta có thể sử dụng mảng để lưu trữ nhiều giá trị, ví dụ như lưu trữ các số nguyên từ 1 đến 5, hoặc một dãy gồm 32 chuỗi ký tự, trong đó mỗi chuỗi lưu trữ tên của một sinh viên trong một lớp học.

Mảng một chiều trong Java được hỗ trợ từ các phiên bản đầu đến hiện tại. Trong chương này, chúng ta sẽ tìm hiểu về mảng một chiều và mảng hai chiều.

Cú pháp khai báo mảng

Để khai báo mảng một chiều trong Java, chúng ta cần xác định trước 3 thông tin cần thiết:

  • Kiểu dữ liệu của mảng.
  • Tên của mảng.
  • Số lượng phần tử của mảng.

Câu lệnh khai báo mảng có 2 dạng như sau:

Dạng 1:

[Kiểu_dữ_liệu] [tên_mảng][] = new [Kiểu_dữ_liệu] [Số_phần_tử_của_mảng];

Dạng 2:

[Kiểu_dữ_liệu][] [tên_mảng] = new [Kiểu_dữ_liệu] [Số_phần_tử_của_mảng];

Ví dụ:

int[] a; // Khai báo mảng tên a và kiểu dữ liệu là int.

Cấp phát bộ nhớ cho mảng

Giống như chuỗi, mảng cần được cấp phát bộ nhớ trước khi sử dụng. Có 2 cách để cấp phát bộ nhớ cho mảng:

Cách 1:

[Kiểu_dữ_liệu] [tên_mảng][] = new [Kiểu_dữ_liệu] [Số_phần_tử_của_mảng];

Cách 2:

[Kiểu_dữ_liệu][] [tên_mảng] = new [Kiểu_dữ_liệu] [Số_phần_tử_của_mảng];

Trong đó, [Số_phần_tử_của_mảng] chỉ ra số lượng phần tử tối đa mà mảng có thể lưu trữ, giá trị này phải là một số nguyên dương.

Ngoài ra, Java còn cho phép chúng ta khai báo và khởi tạo giá trị cho mảng cùng một lúc. Ví dụ:

int[] a = new int[] {2, 10, 4, 8, 5}; // Khai báo mảng a, kiểu dữ liệu là int và chứa 5 phần tử có giá trị lần lượt là 2, 10, 4, 8, 5.

Truy xuất các phần tử của mảng

Chúng ta có thể truy xuất các phần tử của mảng thông qua chỉ số của phần tử. Cú pháp truy xuất như sau:

[tên_mảng][Chỉ_số_phần_tử]

Trong đó, [Chỉ_số_phần_tử] là số thứ tự của các phần tử trong mảng và bắt đầu từ 0. Ví dụ, nếu mảng có n phần tử, các phần tử của mảng sẽ có chỉ số từ 0 đến n - 1.

Ví dụ:

int[] a = new int[] {2, 10, 4, 8, 5};
System.out.println("Phần tử thứ nhất của mảng a: " + a[0]); // Kết quả: 2

Nhập xuất các phần tử cho mảng

Dưới đây là một ví dụ minh họa cách nhập các phần tử cho mảng một chiều từ bàn phím và hiển thị chúng ra màn hình:

import java.util.Scanner;

public class Example {
    public static void main(String[] args) {
        int n;
        Scanner scanner = new Scanner(System.in);

        System.out.print("Nhập số phần tử của mảng: ");
        n = scanner.nextInt();

        int[] a = new int[n];

        System.out.println("Nhập các phần tử của mảng:");
        for (int i = 0; i < n; i++) {
            System.out.print("Phần tử thứ " + (i + 1) + ": ");
            a[i] = scanner.nextInt();
        }

        System.out.println("Các phần tử của mảng:");
        for (int i = 0; i < n; i++) {
            System.out.print(a[i] + " ");
        }
    }
}

Kết quả sau khi biên dịch chạy chương trình:

Nhập số phần tử của mảng: 5
Nhập các phần tử của mảng:
Phần tử thứ 1: 2
Phần tử thứ 2: 10
Phần tử thứ 3: 4
Phần tử thứ 4: 8
Phần tử thứ 5: 5
Các phần tử của mảng: 2 10 4 8 5

Một số thao tác đối với mảng một chiều

Gán giá trị cho phần tử của mảng

Chúng ta có thể gán giá trị của một phần tử trong mảng này cho một phần tử trong mảng khác có cùng kiểu dữ liệu. Ví dụ:

int[] array1 = new int[] {1, 2, 3};
int[] array2 = new int[3];

array2[0] = array1[0];
array2[1] = array1[1];
array2[2] = array1[2];

System.out.println("Phần tử đầu tiên của array2: " + array2[0]); // Kết quả: 1

Sắp xếp các phần tử của mảng

Dưới đây là một ví dụ thực hiện các công việc sau:

  • Nhập các phần tử của mảng A từ bàn phím.
  • Sắp xếp mảng các số đã nhập tăng dần theo giá trị của các phần tử.
  • In ra màn hình mảng ban đầu và mảng đã sắp xếp theo thứ tự tăng dần.

Yêu cầu kỹ thuật: Chương trình phải kiểm tra số lượng phần tử nhập vào (n >= 2 và n <= max - 1, trong đó max là số phần tử tối đa của mảng).

import java.util.Arrays;
import java.util.Scanner;

public class Example {
    public static void main(String[] args) {
        int n;
        Scanner scanner = new Scanner(System.in);

        do {
            System.out.print("Nhập số phần tử của mảng (>= 2 và <= 999): ");
            n = scanner.nextInt();
        } while (n < 2 || n > 999);

        int[] a = new int[n];

        System.out.println("Nhập các phần tử của mảng:");
        for (int i = 0; i < n; i++) {
            System.out.print("Phần tử thứ " + (i + 1) + ": ");
            a[i] = scanner.nextInt();
        }

        int[] sortedArray = Arrays.copyOf(a, n);
        Arrays.sort(sortedArray);

        System.out.println("Mảng ban đầu: " + Arrays.toString(a));
        System.out.println("Mảng đã sắp xếp: " + Arrays.toString(sortedArray));
    }
}

Kết quả sau khi biên dịch chạy chương trình:

Nhập số phần tử của mảng (>= 2 và <= 999): 5
Nhập các phần tử của mảng:
Phần tử thứ 1: 3
Phần tử thứ 2: 1
Phần tử thứ 3: 5
Phần tử thứ 4: 2
Phần tử thứ 5: 4
Mảng ban đầu: [3, 1, 5, 2, 4]
Mảng đã sắp xếp: [1, 2, 3, 4, 5]

Tìm kiếm phần tử của mảng theo một điều kiện cho trước

Dưới đây là một ví dụ thực hiện các công việc sau:

  • Nhập các phần tử của mảng từ bàn phím.
  • Nhập một số nguyên k từ bàn phím.
  • Tìm kiếm phần tử đầu tiên trong mảng có giá trị bằng k và hiển thị vị trí của phần tử đó. Nếu không tìm thấy, thông báo "Trong mảng không có phần tử nào chứa giá trị cần tìm."

Yêu cầu kỹ thuật: Chương trình phải kiểm tra số lượng phần tử nhập vào (nếu n <= 0 hoặc n > số phần tử tối đa của mảng, yêu cầu nhập lại số phần tử).

import java.util.Scanner;

public class Example {
    public static void main(String[] args) {
        int n;
        Scanner scanner = new Scanner(System.in);

        do {
            System.out.print("Nhập số phần tử của mảng (> 0): ");
            n = scanner.nextInt();
        } while (n <= 0);

        int[] a = new int[n];

        System.out.println("Nhập các phần tử của mảng:");
        for (int i = 0; i < n; i++) {
            System.out.print("Phần tử thứ " + (i + 1) + ": ");
            a[i] = scanner.nextInt();
        }

        System.out.print("Nhập giá trị cần tìm kiếm: ");
        int k = scanner.nextInt();

        int index = -1;
        for (int i = 0; i < n; i++) {
            if (a[i] == k) {
                index = i;
                break;
            }
        }

        if (index != -1) {
            System.out.println("Vị trí của phần tử có giá trị " + k + " trong mảng: " + (index + 1));
        } else {
            System.out.println("Trong mảng không có phần tử nào chứa giá trị " + k);
        }
    }
}

Kết quả sau khi biên dịch chạy chương trình:

Nhập số phần tử của mảng (> 0): 5
Nhập các phần tử của mảng:
Phần tử thứ 1: 3
Phần tử thứ 2: 1
Phần tử thứ 3: 5
Phần tử thứ 4: 2
Phần tử thứ 5: 4
Nhập giá trị cần tìm kiếm: 2
Vị trí của phần tử có giá trị 2 trong mảng: 4

Đây là những thao tác cơ bản khi làm việc với mảng một chiều trong Java. Hi vọng rằng những kiến thức này sẽ giúp bạn nắm bắt được cách sử dụng và tận dụng hiệu quả mảng trong việc giải quyết các bài toán lập trình.

1