📖 Tài liệu
1. Ý tưởng bài toán
Mục tiêu:
- Nhập một số nguyên
n(số lượng phần tử) - Nhập
nsố nguyên vào mảng - In mảng ra màn hình
- Sắp xếp mảng tăng dần
- Tìm giá trị lớn nhất và nhỏ nhất
👉 Đây là bài nền tảng giúp hiểu:
- Mảng (Array)
- Vòng lặp
- Tách hàm
2. Bước 1 – Nhập số nguyên an toàn
Code
static int nhapSoNguyen(String label, String condition, int mode) {
while(true) {
try {
System.out.print(label);
int n = Integer.parseInt(sc.nextLine());
if(n < 1 && mode == 0) {
System.out.println("\n" + condition);
continue;
}
return n;
} catch (Exception e) {
System.out.println("\nVui lòng nhập đúng định dạng!");
}
}
}
Giải thích
- Dùng
try-catchđể tránh crash khi nhập sai - Nếu cần điều kiện (
mode == 0) thì kiểm tran > 0 - Nếu sai → nhập lại
👉 Mục tiêu: luôn đảm bảo dữ liệu đầu vào hợp lệ
3. Bước 2 – Nhập mảng
Code
static void nhapMang(int a[]) {
for(int i = 0; i < a.length; i++) {
a[i] = nhapSoNguyen("a[" + i + "] = ", "", 1);
}
}
Giải thích
- Duyệt từ
0 → n-1 - Nhập từng phần tử
👉 Tận dụng lại hàm nhập → không lặp code
4. Bước 3 – Xuất mảng
Code
static void xuatMang(int a[], String label) {
System.out.println("\n" + label);
for(int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
Giải thích
- In tiêu đề
- In từng phần tử
👉 Giúp kiểm tra dữ liệu dễ dàng
5. Bước 4 – Sắp xếp mảng tăng dần
Code
static void sapXepTang(int a[]) {
for(int i = 0; i < a.length - 1; i++) {
for(int j = i + 1; j < a.length; j++) {
if(a[i] > a[j]) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
Giải thích
- So sánh từng phần tử với các phần tử phía sau
- Nếu sai thứ tự → đổi chỗ
👉 Cách này đơn giản, dễ hiểu cho người mới
👉 Độ phức tạp: O(n²)
6. Bước 5 – Tìm giá trị lớn nhất
Code
static int timMax(int a[]) {
int max = a[0];
for(int i = 1; i < a.length; i++) {
if(a[i] > max) {
max = a[i];
}
}
return max;
}
Giải thích
- Giả sử phần tử đầu là lớn nhất
- Duyệt mảng và cập nhật nếu tìm thấy số lớn hơn
7. Bước 6 – Tìm giá trị nhỏ nhất
Code
static int timMin(int a[]) {
int min = a[0];
for(int i = 1; i < a.length; i++) {
if(a[i] < min) {
min = a[i];
}
}
return min;
}
Giải thích
- Tương tự tìm max, nhưng ngược điều kiện
8. Bước 7 – Chạy chương trình
Code
public static void main(String[] args) {
int n = nhapSoNguyen("Nhập số nguyên: ", "Vui lòng nhập n > 0!", 0);
int a[] = new int[n];
nhapMang(a);
xuatMang(a, "Mảng đã nhập:");
sapXepTang(a);
xuatMang(a, "Mảng đã sắp xếp tăng:");
System.out.println("\nMax = " + timMax(a));
System.out.println("Min = " + timMin(a));
}
Giải thích luồng chạy
- Nhập
n - Tạo mảng
- Nhập dữ liệu
- In mảng ban đầu
- Sắp xếp
- In lại
- In Max và Min
9. Tổng kết
Sau bài này, bạn nắm được:
- Cách làm việc với mảng
- Cách tách chương trình thành nhiều hàm
- Cách xử lý input an toàn
- Các thuật toán cơ bản (sort, max, min)
👉 Đây là nền tảng quan trọng trước khi học:
- Tìm kiếm nhị phân
- Sắp xếp nâng cao
- Cấu trúc dữ liệu
10. Code hoàn chỉnh
Xem code
import java.util.Scanner;
public class Main {
static Scanner sc = new Scanner(System.in);
// Nhập số nguyên an toàn
static int nhapSoNguyen(String label, String condition, int mode) {
while(true) {
try {
System.out.print(label);
int n = Integer.parseInt(sc.nextLine());
if(n < 1 && mode == 0) {
System.out.println("\n" + condition);
continue;
}
return n;
} catch (Exception e) {
System.out.println("\nVui lòng nhập đúng định dạng!");
}
}
}
// Nhập mảng
static void nhapMang(int a[]) {
for(int i = 0; i < a.length; i++) {
a[i] = nhapSoNguyen("a[" + i + "] = ", "", 1);
}
}
// Xuất mảng
static void xuatMang(int a[], String label) {
System.out.println("\n" + label);
for(int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
// Sắp xếp tăng dần
static void sapXepTang(int a[]) {
for(int i = 0; i < a.length - 1; i++) {
for(int j = i + 1; j < a.length; j++) {
if(a[i] > a[j]) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
// Tìm max
static int timMax(int a[]) {
int max = a[0];
for(int i = 1; i < a.length; i++) {
if(a[i] > max) {
max = a[i];
}
}
return max;
}
// Tìm min
static int timMin(int a[]) {
int min = a[0];
for(int i = 1; i < a.length; i++) {
if(a[i] < min) {
min = a[i];
}
}
return min;
}
public static void main(String[] args) {
int n = nhapSoNguyen("Nhập số nguyên: ", "Vui lòng nhập n > 0!", 0);
int a[] = new int[n];
nhapMang(a);
xuatMang(a, "Mảng đã nhập:");
sapXepTang(a);
xuatMang(a, "Mảng đã sắp xếp tăng:");
System.out.println("\nMax = " + timMax(a));
System.out.println("Min = " + timMin(a));
}
}