/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/

[Tự Học Java] MOB1014-Java 1 - Bài 4 - Class & Object - Overloading/Nạp Chồng, Constructor/Phương Thức Khởi Tạo P2/2

NỘI DUNG:
1. Overloading method/Nạp chồng phương thức
2. Constructor/Hàm xây dựng/Phương thức khởi tạo
3. Bài tập:     
  • Tạo class mới có tên SanPham.java với các thuộc tính:  maSanPham, tenSanPham, donGia, giamGia (dùng phương thức getter và setter để đọc ghi thông tin cho sản phẩm)
  • Xây dựng phương thức nhapThongTin (đọc dữ liệu nhập vào từ bàn phím) và xuatThongTin (in thông tin sản phẩm ra màn hình)
  • Khởi tạo phương thức main với các yêu cầu:
- Tạo ra 2 sản phẩm mới là sp1 và sp2 từ class SanPham
- Truy xuất và gọi phương thức nhapThongTin để nhập dữ liệu từ bàn phím
- Truy xuất và gọi phương thức xuatThongTin để in thông tin của từng sản phẩm ra màn hình
  • Xây dựng construtor cho class SanPham với các yêu cầu:
- Đầy đủ các tham số (maSanPham, tenSanPham, donGia, giamGia)
- Chỉ 3 tham số truyền vào (maSanPham, tenSanPham, donGia) và ngầm hiểu KHÔNG giảm giá
- Không tham số đầu vào với các giá trị mặc định là NULL cho các trường maSanPham, tenSanPham và KHÔNG cho các trường donGia, giamGia
  • Viết chương trình tạo 2 sản phẩm có giảm giá (4  tham số đầu vào) và không giảm giá (3 tham số truyền vào) sau đó xuất thông tin 2 sản phẩm ra màn hình
  • Nâng cấp lớp SanPham bằng cách khai báo các trường dữ liệu với đặc tả truy xuất là private để hạn chế truy xuất trực tiếp đến các trường này

THỰC HIỆN:

1. Overloading method/Nạp chồng phương thức:

Là các phương thức nằm cùng trong một class, được đặt tên giống nhau nhưng khác tham số truyền vào (khác kiểu dữ liệu, khác số lượng tham số).


Ví dụ 421:
Tạo class mới có tên SinhVien_421 với 4 phương thức có cùng 1 tên là setMaSoSV dùng để thiết lập/gán mã số sinh viên (maSoSV) với các yêu cầu:
  • Gán maSoSV là "SV999" nếu phương thức đó không có tham số truyền vào
  • Gán maSoSV là chuỗi truyền vào, nếu dữ liệu truyền vào là chuỗi
  • Gán maSoSV là "SV" + số truyền vào, nếu dữ liệu truyền vào là số
  • Gán maSoSV là chuỗi + số, nếu dữ liệu truyền với 2 tham số (tham số thứ nhất là chuỗi, tham số thứ 2 là số) 
Code:
public class SinhVien_421 {
    public String maSoSV;

    // === GETTING ===
    public String getMaSoSV() {
        return maSoSV;
    }
    
    // === SETTING ===
    public void setMaSoSV() {
        this.maSoSV = "SV999";
    }
    
    public void setMaSoSV(String laChuoi) {
        this.maSoSV = laChuoi;
    }
    
    public void setMaSoSV(int laSo) {
        this.maSoSV = "SV" + laSo;
    }
    
    public void setMaSoSV(String laChuoi, int laSo) {
        this.maSoSV = laChuoi + laSo;
    }
       
}

Tạo class main có tên Main_SinhVien_421, tạo đối tượng sinh viên mới trong class, truy cập và truyền dữ liệu cho các phương thức tương ứng, truy xuất vào phương thức getting để in ra dữ liệu theo yêu cầu.

Code:
public class Main_SinhVien_421 {
    public static void main(String[] args) {
        SinhVien_421 svNapChong = new SinhVien_421();
        
        svNapChong.setMaSoSV();
        System.out.println("Ma so SV (KHONG THAM SO): " + svNapChong.getMaSoSV());
        
        svNapChong.setMaSoSV("SV123");
        System.out.println("Ma so SV (LA CHUOI): " + svNapChong.getMaSoSV());
        
        svNapChong.setMaSoSV(456);
        System.out.println("Ma so SV (LA SO): " + svNapChong.getMaSoSV());
        
        svNapChong.setMaSoSV("SV", 789);
        System.out.println("Ma so SV (LA CHUOI, va LA SO): " + svNapChong.getMaSoSV());
        
    }
}

Kết quả:
run:
Ma so SV (KHONG THAM SO): SV999
Ma so SV (LA CHUOI): SV123
Ma so SV (LA SO): SV456
Ma so SV (LA CHUOI, va LA SO): SV789
BUILD SUCCESSFUL (total time: 0 seconds)

2. Constructor/Hàm xây dựng/Phương thức khởi tạo
  • Constructor là phương thức đặc biệt để tạo ra đối tượng/object, nó được gọi tự động và được gọi đầu tiên khi một object được khởi tạo
  • Constructor phải có tên trùng với tên lớp/class
  • Constructor không có giá trị trả về, có thể có hoặc không có tham số truyền vào
  • Contructor có thể bị nạp chồng (overloading)
  • Nếu một class chưa khai báo constructor thì sẽ được JAVA cung cấp một constructor mặc định (không tham số truyền vào)
Noted: Khi cần khởi tạo giá trị mặc định cho đối tượng thì chúng ta dùng constructor


Ví dụ 422
  • Khởi tạo class có tên SinhVien_422 với 3 biến (maSoSV, hoTen, namSinh) và xây dựng hàm/constructor:
- Gán giá trị mặc định cho các biến trên nếu chúng không có giá trị truyền vào
- Gán giá trị cho các biến là các giá trị của biến truyền vào
  • Xây dựng phương thức hiển thị thông tin sinh viên
  • Khởi tạo hàm main, tạo mới đối tượng và gọi phương thức hiện thị sinh viên
Code:
public class SinhVien_422 {
    public String maSoSV;
    public String hoTen;
    public int namSinh;
    
    // CONSTRUCTOR
    // Gán giá trị mặc định cho các biến trên nếu chúng không có giá trị truyền vào
public SinhVien_422() { this.maSoSV = "SV000"; this.hoTen = "Tony TEO"; this.namSinh = 2000; } //Gán giá trị cho các biến là các giá trị của biến truyền vào
public SinhVien_422(String maSoSV, String hoTen, int namSinh) { this.maSoSV = maSoSV; this.hoTen = hoTen; this.namSinh = namSinh; } // hien thi/in thong tin sinh vien public void inThongTinSV(){ System.out.println("Ma SV: " + this.getMaSoSV()); System.out.println("Ho ten: " + this.getHoTen()); System.out.println("Nam sinh: " + this.namSinh); } // GETTING public String getMaSoSV() { return maSoSV; } public String getHoTen() { return hoTen; } public int getNamSinh() { return namSinh; } // SETTING public void setMaSoSV(String maSoSV) { this.maSoSV = maSoSV; } public void setHoTen(String hoTen) { this.hoTen = hoTen; } public void setNamSinh(int namSinh) { this.namSinh = namSinh; } }

  • Khởi tạo hàm main, tạo mới đối tượng và gọi phương thức hiện thị sinh viên
Code:
public class Main_SinhVien_422 {
    public static void main(String[] args) {
        SinhVien_422 sv4221 = new SinhVien_422();
        sv4221.inThongTinSV();
        
        System.out.println("==================");
        SinhVien_422 sv4222 = new SinhVien_422("SV123", "Van Cong Khanh", 2222);
        sv4222.inThongTinSV();
        
    }
}

Kết quả:
run:
Ma SV: SV000
Ho ten: Tony TEO
Nam sinh: 2000
==================
Ma SV: SV123
Ho ten: Van Cong Khanh
Nam sinh: 2222
BUILD SUCCESSFUL (total time: 0 seconds)


3. Bài Tập:

  • Tạo class mới có tên SanPham.java với các thuộc tính:  maSanPham, tenSanPham, donGia, giamGia (dùng phương thức getter và setter để đọc ghi thông tin cho sản phẩm)
  • Xây dựng phương thức nhapThongTin (đọc dữ liệu nhập vào từ bàn phím) và xuatThongTin (in thông tin sản phẩm ra màn hình)
Code:
import java.util.Scanner;
public class SanPham {
    public String maSanPham;
    public String tenSanPham;
    public double donGia;
    public double giamGia;

    /*
    Tạo class mới có tên SanPham.java với các thuộc tính:  
    maSanPham, tenSanPham, donGia, giamGia 
    (dùng phương thức getter và setter để đọc ghi thông tin cho sản phẩm)
    */
    
    // SETTER
    public void setMaSanPham(String maSanPham) {
        this.maSanPham = maSanPham;
    }

    public void setTenSanPham(String tenSanPham) {
        this.tenSanPham = tenSanPham;
    }

    public void setDonGia(double donGia) {
        this.donGia = donGia;
    }

    public void setGiamGia(double giamGia) {
        this.giamGia = giamGia;
    }
    
    //GETTER

    public String getMaSanPham() {
        return maSanPham;
    }

    public String getTenSanPham() {
        return tenSanPham;
    }

    public double getDonGia() {
        return donGia;
    }

    public double getGiamGia() {
        return giamGia;
    }
    
    /*
    Xây dựng phương thức nhapThongTin (đọc dữ liệu nhập vào từ bàn phím), 
    và xuatThongTin (in thông tin sản phẩm ra màn hình)
    */
    // NHAP THONG TIN CHO SAN PHAM
    public void nhapThongTin(){
        Scanner in = new Scanner(System.in);
        
        System.out.print("Ma san pham: ");
        maSanPham = in.nextLine();
        System.out.print("Ten san pham: ");
        tenSanPham = in.nextLine();
        System.out.print("Gia san pham: ");
        donGia = in.nextDouble();
        System.out.print("Giam gia: ");
        giamGia = in.nextDouble();
    }
       
    // IN THONG TIN SAN PHAM RA MAN HINH
    public void xuatThongTin(){
        System.out.println("Ma san pham: " + this.maSanPham);
        System.out.println("Ten san pham: " + this.tenSanPham);
        System.out.println("Gia san pham: " + this.donGia);
        System.out.println("Giam gia: " + this.giamGia);
    } 
}
  • Khởi tạo phương thức main với các yêu cầu:
- Tạo ra 2 sản phẩm mới là sp1 và sp2 từ class SanPham
- Truy xuất và gọi phương thức nhapThongTin để nhập dữ liệu từ bàn phím
- Truy xuất và gọi phương thức xuatThongTin để in thông tin của từng sản phẩm ra màn hình

Code:
public class Main_SanPham {
    public static void main(String[] args) {
/*
Khởi tạo phương thức main với các yêu cầu:
- Tạo ra 2 sản phẩm mới là sp1 và sp2 từ class SanPham
- Truy xuất và gọi phương thức nhapThongTin để nhập dữ liệu từ bàn phím
- Truy xuất và gọi phương thức xuatThongTin để in thông tin của từng sản phẩm ra màn hình
*/
        SanPham sp1 = new SanPham();
        SanPham sp2 = new SanPham();
        
        sp1.nhapThongTin();
        sp2.nhapThongTin();
        
        System.out.println("================");
        sp1.xuatThongTin();
        System.out.println();
        sp2.xuatThongTin();
    }
}

  • Xây dựng phương thức getThueThuNhap là 10% giá sản phẩm với phạm vi truy cập chỉ trong class SanPham (gợi ý: dùng private), bổ sung thông tin của phương thức thuế thu nhập vào phương thức xuatThongTin
Code:
/*
    Xây dựng phương thức getThueThuNhap với phạm vi truy cập chỉ trong class SanPham
    */
    private double getThueThuNhap(){
        return donGia*0.1;
    }
        
    public void xuatThongTin(){
        System.out.println("Ma san pham: " + this.maSanPham);
        System.out.println("Ten san pham: " + this.tenSanPham);
        System.out.println("Gia san pham: " + this.donGia);
        System.out.println("Giam gia: " + this.giamGia);
        
        //bổ sung thông tin của phương thức thuế thu nhập vào phương thức xuatThongTin
        System.out.println("Thue thu nhap: " + this.getThueThuNhap());
    } 

  • Xây dựng construtor cho class SanPham với các yêu cầu:
- Đầy đủ các tham số (maSanPham, tenSanPham, donGia, giamGia)
- Chỉ 3 tham số truyền vào (maSanPham, tenSanPham, donGia) và ngầm hiểu KHÔNG giảm giá
- Không tham số đầu vào với các giá trị mặc định là NULL cho các trường maSanPham, tenSanPham và KHÔNG cho các trường donGia, giamGia
Code:
// CONSTRUCTOR
/*
Xây dựng construtor cho class SanPham với các yêu cầu:
- Đầy đủ các tham số (maSanPham, tenSanPham, donGia, giamGia)
- Chỉ 3 tham số truyền vào (maSanPham, tenSanPham, donGia) và ngầm hiểu KHÔNG giảm giá
- Không tham số đầu vào với các giá trị mặc định là NULL cho các trường maSanPham, tenSanPham và KHÔNG cho các trường donGia, giamGia
*/
    
    public SanPham(String maSanPham, String tenSanPham, double donGia, double giamGia) {
        this.maSanPham = maSanPham;
        this.tenSanPham = tenSanPham;
        this.donGia = donGia;
        this.giamGia = giamGia;
    }
    
    public SanPham(String maSanPham, String tenSanPham, double donGia) {
        this.maSanPham = maSanPham;
        this.tenSanPham = tenSanPham;
        this.donGia = donGia;
        this.giamGia = 0;
    }
    
    public SanPham() {
        this.maSanPham = "";
        this.tenSanPham = "";
        this.donGia = 0;
        this.giamGia = 0;
    }

  • Viết chương trình tạo 2 sản phẩm có giảm giá (4  tham số đầu vào) và không giảm giá (3 tham số truyền vào) sau đó xuất thông tin 2 sản phẩm ra màn hình
Code:
import java.util.Scanner;
public class Main_SanPham_Constructor {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        
        String maSanPham, tenSanPham;
        double donGia,giamGia;
        
        System.out.print("Ma san pham: ");
        maSanPham = in.nextLine();
        System.out.print("Ten san pham: ");
        tenSanPham = in.nextLine();
        System.out.print("Gia san pham: ");
        donGia = in.nextDouble();
        System.out.print("Giam gia: ");
        giamGia = in.nextDouble();
        
        SanPham sp1 = new SanPham(tenSanPham, maSanPham, donGia, giamGia);     
        System.out.println("-----");
        sp1.xuatThongTin();
        
        /*
        SAN PHAM 2
        */
        in.nextLine();
        System.out.println();
        System.out.println("===============");
        System.out.print("Ma san pham: ");
        maSanPham = in.nextLine();
        System.out.print("Ten san pham: ");
        tenSanPham = in.nextLine();
        System.out.print("Gia san pham: ");
        donGia = in.nextDouble();

        SanPham sp2 = new SanPham(tenSanPham, maSanPham, donGia); 
        System.out.println("-----");
        sp2.xuatThongTin();     
        
        
    }
}

  • Nâng cấp lớp SanPham bằng cách khai báo các trường dữ liệu với đặc tả truy xuất là private để hạn chế truy xuất trực tiếp đến các trường này
Chúng ta chỉ cần thay thế từ khóa public thành từ khóa private cho các trường dữ liệu là được

Code:
    private String maSanPham;
    private String tenSanPham;
    private double donGia;
    private double giamGia;

FULL code của class SanPham
import java.util.Scanner;
public class SanPham {
    private String maSanPham;
    private String tenSanPham;
    private double donGia;
    private double giamGia;

    /*
    Tạo class mới có tên SanPham.java với các thuộc tính:  
    maSanPham, tenSanPham, donGia, giamGia 
    (dùng phương thức getter và setter để đọc ghi thông tin cho sản phẩm)
    */
    
    // SETTER
    public void setMaSanPham(String maSanPham) {
        this.maSanPham = maSanPham;
    }

    public void setTenSanPham(String tenSanPham) {
        this.tenSanPham = tenSanPham;
    }

    public void setDonGia(double donGia) {
        this.donGia = donGia;
    }

    public void setGiamGia(double giamGia) {
        this.giamGia = giamGia;
    }
    
    //GETTER

    public String getMaSanPham() {
        return maSanPham;
    }

    public String getTenSanPham() {
        return tenSanPham;
    }

    public double getDonGia() {
        return donGia;
    }

    public double getGiamGia() {
        return giamGia;
    }
    
    /*
    Xây dựng phương thức getThueThuNhap với phạm vi truy cập chỉ trong class SanPham
    */
    private double getThueThuNhap(){
        return donGia*0.1;
    }
    
    
    /*
    Xây dựng phương thức nhapThongTin (đọc dữ liệu nhập vào từ bàn phím), 
    và xuatThongTin (in thông tin sản phẩm ra màn hình)
    */
    // NHAP THONG TIN CHO SAN PHAM
    public void nhapThongTin(){
        Scanner in = new Scanner(System.in);
        
        System.out.print("Ma san pham: ");
        maSanPham = in.nextLine();
        System.out.print("Ten san pham: ");
        tenSanPham = in.nextLine();
        System.out.print("Gia san pham: ");
        donGia = in.nextDouble();
        System.out.print("Giam gia: ");
        giamGia = in.nextDouble();
    }
       
    // IN THONG TIN SAN PHAM RA MAN HINH
    public void xuatThongTin(){
        System.out.println("Ma san pham: " + this.maSanPham);
        System.out.println("Ten san pham: " + this.tenSanPham);
        System.out.println("Gia san pham: " + this.donGia);
        System.out.println("Giam gia: " + this.giamGia);
        
        //bổ sung thông tin của phương thức thuế thu nhập vào phương thức xuatThongTin
        System.out.println("Thue thu nhap: " + this.getThueThuNhap());
    } 
    
    // CONSTRUCTOR
/*
Xây dựng construtor cho class SanPham với các yêu cầu:
- Đầy đủ các tham số (maSanPham, tenSanPham, donGia, giamGia)
- Chỉ 3 tham số truyền vào (maSanPham, tenSanPham, donGia) và ngầm hiểu KHÔNG giảm giá
- Không tham số đầu vào với các giá trị mặc định là NULL cho các trường maSanPham, tenSanPham và KHÔNG cho các trường donGia, giamGia
*/
    
    public SanPham(String maSanPham, String tenSanPham, double donGia, double giamGia) {
        this.maSanPham = maSanPham;
        this.tenSanPham = tenSanPham;
        this.donGia = donGia;
        this.giamGia = giamGia;
    }
    
    public SanPham(String maSanPham, String tenSanPham, double donGia) {
        this.maSanPham = maSanPham;
        this.tenSanPham = tenSanPham;
        this.donGia = donGia;
        this.giamGia = 0;
    }
    
    public SanPham() {
        this.maSanPham = "";
        this.tenSanPham = "";
        this.donGia = 0;
        this.giamGia = 0;
    }
    
}


Xong!

[Tự Học Java] MOB1014-Java 1 - Bài 4 - Class & Object / Lớp & Đối Tượng P1/2

Các điểm chính của lập trình hướng thủ tục và lập trình hướng đối tượng
Lập trình hướng thủ tục:
  • Giải quyết vấn đề từng bước cho đến khi đạt yêu cầu
  • Lập trình từ trên xuống
  • Lập trình theo hàm -> chỉ tạo ra hàm xử lý khi gặp vấn đề nào đó

Lập trình hướng đối tượng:
  • Dựa trên nền tảng các lớp đã xây dựng sẵn
  • Xác định trước các chức năng cần phải thực hiện

Đặt điểm OOP:
  • OOP (Object-oriented programming) - Lập trình hướng đối tượng là kiểu lập trình lấy đối tượng làm nền tảng.
  • Đơn giản hóa việc phát triển chương trình
  • Tạo ra các chương trình có tính mềm dẻo và linh động cao
  • Dễ dàng phát triển, bảo trì và nâng cấp

NỘI DUNG:
1. Làm quen lớp, đối tượng, thuộc tính và phương thức
2. Getter và Setter
3. Qui tắc đặt tên 
4. Phạm vi truy cập

THỰC HIỆN:

1. Làm quen lớp, đối tượng, thuộc tính và phương thức
  • Class/Lớp: chỉ là cái gì đó chung chung chưa áp chỉ một cái nào cả, như là một khuôn mẫu được sử dụng mô tả các đối thượng cùng loại
  • Object/Đối tượng: là cái cụ thể nào đó bao gồm các thuộc tính (là các danh từ/thuộc tính), các phương thức (hàm..)



  • Property/Thuộc tính/Trường dữ liệu: là các đặc điểm, đặc tính của một lớp. Ví dụ: Cao, mập, tóc dài, da trắng,..
  • Method/Phương thức: Là các hành động có thể được thực hiện từ lớp. Phương thức cũng giống như hàm, nhưng là hàm riêng của từng lớp. Ví dụ: ăn, ngủ, chạy, ...

Ví dụ 4.1:
  • Viết chương trình tạo lớp/class sinh viên với các thuộc tính: maSoSV, hoTen, diemTrungBinh.
  • Xây dựng phương thức nhận dữ liệu truyền vào cho đối tượng sinh viên (từ class Main)
  • Xây dựng phương thức xếp loại học lực dựa vào điểm trung bình sau đó trả về kết quả nếu < 5 là Yếu, < 7 là Trung Bình, còn lại là Khá Giỏi
  • Xây dựng phương thức in thông tin sinh viên có tên In_SinhVien.
  • Tạo mới đối tượng sinh viên, truyền/gán dữ liệu cho các thuộc tính của sinh viên, gọi phương thức In_SinhVien

Hướng dẫn: 
  • Tạo class mới có tên SinhVien_1.java (KHÔNG có phương thức main)
Code:
public class SinhVien_1 {
    public String maSoSV;
    public String hoTen;
    public double diemTrungBinh;
    
    public SinhVien_1(String vMaSoSV, String vHoTen, double vDiemTrungBinh){
        this.maSoSV = vMaSoSV;
        this.hoTen = vHoTen;
        this.diemTrungBinh = vDiemTrungBinh;
    }
    
    public String XepLoai(){
        String ketQua;
        if (this.diemTrungBinh < 5) ketQua = "Yeu";     
        else if (this.diemTrungBinh < 7) ketQua = "Trung Binh";
        else ketQua ="Kha Gioi";
        return ketQua;
    }
    
    public void In_SinhVien(){
        System.out.println("MSSV: " + this.maSoSV);
        System.out.println("Ho ten: " + this.hoTen);
        System.out.println("Xep loai: " + this.XepLoai());
    }
}


Trong đó:




  • Tạo class mới có tên Main_SinhVien_1.java với bao gồm phương thức main. Truy cập tạo mới đối tượng sinh viên và gán giá trị cho thuộc tính, truy xuất vào phương thức.
Code:
public class Main_SinhVien_1 {
    public static void main(String[] args) {
         SinhVien_1 sv_001 = new SinhVien_1("sv001", "Van Cong Khanh", 9); //SinhVien_1 là tên của class SinhVien_1.Java
         sv_001.In_SinhVien(); // gọi phương thức In_SinhVien từ class SinhVien_1
    }
}

Trong đó:


2. Getter và Setter (Enscapsulation)

Getter: đọc thuộc tính đối tượng, trả về giá trị của thuộc tính => có giá trị trả về
Setter: thiết lập giá trị nên không có kiểu dữ liệu trả về

Ví dụ:
public class SinhVien_2 {
    public String hoTen;
    public double diem;    

    // === GETTER ===
    public String getHoTen() {
        return hoTen;
    }
    public double getDiem() {
        return diem;
    }

    // === SETTER ===
    public void setHoTen(String vHoTen) {
        this.hoTen = vHoTen;
    }
    public void setDiem(double vDiem) {
        this.diem = vDiem;
    }
      
}
 
Noted: 
  • Trên thực tế việc truy cập và gán giá trị cho dữ liệu đều thông qua getter và setter, sử dụng công cụ để tạo ra một cách tự động.
  • Từ khóa this sử dụng để đại diện cho đối tượng hiện tại của class, this được sử dụng để tham chiếu đến các field, method. Trong một số trường hợp tên biến cục bộ được đặt trùng với tên trường dữ liệu trong class, chúng ta sử dụng từ khóa this để dễ phân biệt.



Truy xuất và gán dữ liệu cũng tương tự
Code:
public class Main_SinhVien_2 {
    public static void main(String[] args) {
        SinhVien_2 sv_002 = new SinhVien_2();
        sv_002.setHoTen("Van Cong Khanh");
        sv_002.setDiem(8);     
        
    }
}

3. Qui tắc đặt tên 

4. Phạm vi truy cập
  • Public: Có thể truy cập từ bất cứ đâu. Dùng cho class, property, method
  • Protected: Truy trong packet và subclass (kế thừa). Dùng cho property, method
  • Null (rỗng)/{default}: Truy cập trong packet. Dùng cho class, property, method
  • Private: Chỉ được phép truy cập trong chính class nào đó. Dùng cho property, method


Ví dụ:





Xong!





[Tự Học Java] MOB1014-Java 1 - Bài 3 - Vòng Lặp & Mảng - P2/2

NỘI DUNG:
1. Mảng là gì, cách khai báo, cách truy cập, duyệt mảng
2. FOR EACH
3. Bài tập

THỰC HIỆN:
1. Mảng là gì 
Mảng là cấu trúc lưu trữ nhiều phần tử có cùng kiểu dữ liệu.



Khai báo KHÔNG khởi tạo
String khaiBaoKhongKhoiTao[] ;
String [] khaiBaoKhongKhoiTao_CachKhac;
String [] khaiBaoKhongKhoiTao_CoGioiHang = new String[5] ;

Khai báo CÓ khởi tạo
int [] soNguyen = new int[]{10, 20, 30, 40, 50}; // khởi mảng có 5 giá trị
String [] mauSac = {"Xanh", "Do", "Trang", "Vang"}; // khởi mảng có 4 giá trị

Chúng ta có thể truy cập/thay đổi giá trị mảng thông qua chỉ số Index
// In ra giá trị đầu tiên của mảng
System.out.println(mauSac[0]);
        
// Thay đổi giá trị đầu tiên thành "XANH XANH" 
mauSac[0] = "XANH XANH";
System.out.println(mauSac[0]);


Duyệt mảng sử dụng vòng lặp đơn giản
for (int i = 0; i < mauSac.length; i++){ // sử dụng thuộc tính length để lấy độ dài của mảng
    System.out.print(mauSac[i] + ", ");
}
System.out.println();

Ví dụ:
public class Vidu_3_2_mang {
    public static void main(String[] args) {
        String khaiBaoKhongKhoiTao[] ;
        String [] khaiBaoKhongKhoiTao_CachKhac;
        String [] khaiBaoKhongKhoiTao_CoGioiHang = new String[5] ;
        int [] soNguyen = new int[]{10, 20, 30, 40, 50}; // khởi mảng có 5 giá trị
        String [] mauSac = {"Xanh", "Do", "Trang", "Vang"}; // khởi mảng có 4 giá trị
        
       
        // In ra giá trị đầu tiên của mảng
        System.out.println(mauSac[0]);
        
        // Thay đổi giá trị đầu tiên thành "XANH XANH" 
        mauSac[0] = "XANH XANH";
        System.out.println(mauSac[0]);
        
        // sử dụng thuộc tính length để lấy độ dài của mảng
        System.out.println(mauSac.length);
        
        //duyet
        for (int i = 0; i < mauSac.length; i++){
            System.out.print(mauSac[i] + ", ");
        }
        System.out.println();
        
        
        for (int j = 0; j < soNguyen.length; j++){
            soNguyen[j] = soNguyen[j] + 100;
        }
        //in mang
        for (int j = 0; j < soNguyen.length; j++){
            System.out.print(soNguyen[j] + ", ");
        }
    }
}


2. FOR EACH

Ví dụ:
public class Vidu_3_2_ForEach {
    public static void main(String[] args) {
        int [] soNguyen = {10, 20, 30, 40, 50};
        for (int x: soNguyen){
            System.out.println(x);
        }
    }
}

3. Bài tập

3.1 Viết chương trình nhập mảng số nguyên từ bàn phím:
  • Xuất ra mảng vừa nhập ra màn hình
  • Sắp xếp mảng và xuất mảng sau khi sắp xếp
  • Tìm phần tử nhỏ nhất của mảng
  • Tính và xuất ra màn hình trung bình cộng các phần tử chia hết cho 3
Code:
import java.util.Scanner;
public class Baitap_NhapXuatMang {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n;
        int a[];
        System.out.print("Nhap so phan tu: ");
        n = in.nextInt();
        a = new int[n];
        //nhap
        System.out.println("Nhap cac phan tu cho mang: ");
        for(int i=0;i < n;i++){
            System.out.printf("a[%d]= ",i);
            a[i]=in.nextInt();
        }
        // 1 xuat mang
        System.out.println("\nMang vua nhap:");
        for(int x:a){
            System.out.print(x+" ");
        }
        // 2 sap xep GIAM
        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;
                }
            }
        }

        System.out.println("\nMang sap xep GIAM:");
        for(int x:a){
            System.out.print(x+" ");
        }        
        System.out.println();
        
        // 3 tim MIN
        int min = a[0];
        for(int i=1;i < a.length;i++){
            if(min > a[i]){
                min = a[i];
            }
        }
        System.out.print("Min la: " + min + "\n");
        
        // 4 tim so chia het cho 3, tinh tong, dem so phan tu, tinh TRUNG BINH cong
        
        double tong=0;
        int count=0;
        for(int x : a){
            if(x %3 == 0){
                tong = tong + x;
                count++;
            }
        }
        System.out.println("\nTRUNG BINH cong cac phan tu chia het cho 3: " + tong/count);

    }
}


Xong!

[Tự Học Java] MOB1014-Java 1 - Bài 3 - Vòng Lặp - P1/2

NỘI DUNG:
1. Lý thuyết và ví dụ
     A. Vòng lặp
     B. Break/Continue
 
2. Bài tập


THỰC HIỆN:

1. Lý thuyết và ví dụ

A. Vòng lặp WHILE, FOR, DO... WHILE

Sử dụng vòng lặp khi: Một đoạn code/mã lệnh trong chương trình được thực hiện lặp đi lặp lại cho đến khi thoả mãn một điều kiện nào đó thì nó sẽ kết thúc.

Các vòng lặp phổ biến: WHILE, FOR, DO... WHILE

  • WHILE:
Ví dụ 1.1: Xuất ra màn hình 10 lần chuỗi ký "Vong lap WHILE"

Code:
public class Vidu_3_While {
    public static void main(String[] args) {
        int i = 1; // khởi tạo i = 1
        while (i <= 10) { // điều kiện dừng, dừng khi i > 10
          System.out.println("Vong lap WHILE");
          i++; // tăng i lên 1
        }
    }
}

HOẶC xuất thêm giá trị của biến i mỗi khi thực hiện lệnh in chuỗi trên
Code:
public class Vidu_3_While {
    public static void main(String[] args) {
        int i = 1;
        while (i <= 10) {
          System.out.println("Vong lap WHILE. Gia tri cua i lan thu: " + i);
          i++;
        }
    }
}

  • FOR:
Ví dụ 1.2: Yêu cầu tương tự ví dụ 1.1, nhưng chúng ta dùng FOR để lặp lại.
public class Vidu_3_For {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) { // biến khởi tạo; điều kiện; tăng giá trị của biến
            System.out.println("Vong lap FOR cung tuong tu WHILE. Gia tri cua i lan thu: " + i);
        }
    }
}

Nhận xét: Cách hoạt động của FOR cũng tương tự như WHILE, tuy nhiên cách trình bày các biến khởi tạo, điều kiện dừng, tăng giá trị của biến chúng để chung trên một dòng.

  • DO...WHILE: Cũng tương tự như WHILE nhưng nó thực hiện trước sau đó mới kiểm tra điều kiện. Cũng có nghĩa là vòng lặp sẽ chạy ít nhất một lần ngay cả khi điều kiện vẫn thỏa mãn
Ví dụ 1.3
Code:
public class Vidu_3_DoWhile {
    public static void main(String[] args) {
        int i = 1;
        do {
            System.out.println("Vong lap DO ... WHILE. Gia tri cua i lan thu: " + i);
            i++;
        }
        while (i <= 10);
    }
}

Noted: ĐỪNG QUÊN tăng biến được sử dụng trong điều kiện, nếu không vòng lặp sẽ không bao giờ kết thúc, hay bị lặp vô tận!

Ví dụ 1.4: Viết chương trình đọc dữ liệu từ bàn phím nếu số < 0 (hay số nguyên âm) thì yêu cầu nhập lại, và kết thúc chương trình khi nhập số nguyên dương (bỏ qua việc kiểm tra dữ liệu đầu vào ký tự)

Code:
public class Vidu_1_4 {
    public static void main(String[] args) {
        int so=0;
        Scanner in = new Scanner(System.in);       
        do{
            System.out.print("Nhap so duong: ");
            so = in.nextInt();
            if (so < 0) System.out.println("Nhap vao so > 0");
        }while(so < 0);
        
    }
}


Ví dụ 1.5: Viết chương trình đọc điểm (số nguyên dương) nhập vào trong khoảng từ 0 đến 10

Code:
public class Vidu_1_5 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double diem = 0;
        do{
            System.out.print("nhap diem(0-10): ");
            diem = scanner.nextDouble();
        }
        while(diem < 0 || diem > 10);
        System.out.printf("Diem da nhap: %.1f", diem); // định dạng kiể fload là lấy 1 số thập phân
    }
}

B. Break/Continue

  • Break: Câu break lệnh cũng có thể được sử dụng để nhảy/thoát ra khỏi vòng lặp
Ví dụ:
public class lap_break {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
               break; // nếu i = 5 thì thoát khỏi vòng lặp
            }
            System.out.print(i+" ");
        }
    }
}
  • Continue: Câu continue lệnh ngắt/bỏ qua một lần lặp và không thực hiện khối lệnh phía sau nó (trong vòng lặp), nếu một điều kiện cụ thể xảy ra và tiếp tục với lần lặp tiếp theo trong vòng lặp.
Ví dụ:
public class lap_continue {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                continue; // bỏ qua KHÔNG IN giá trị i = 5
            }
            System.out.print(i+" ");
        }
    }
}


2. Bài tập

2.1 Viết chương trình in ra bảng cửu chương 7
  • Dùng WHILE
Code:
public class Baitap_BangCuuChuong {
    
    public static void main(String[] args) {
        System.out.println("In cuu chuong 7");       
        int i = 1;
        while(i<= 10){
            System.out.println("7 x " + i + " = " + (7 * i));
            i++;
        }
    }
}

  • Dùng FOR
Code:
public class Baitap_BangCuuChuong {
    
    public static void main(String[] args) {
        System.out.println("In cuu chuong 7");       
        for (int i = 1;i<= 10; i++){
            System.out.println("7 x " + i + " = " + (7 * i));
            
        }
    }
}

2.2 Viết chương trình nhập số nguyên từ bàn phím, xuất ra bảng cửu chương của số vừa nhập

Code:
import java.util.Scanner;
public class Baitap_BangCuuChuong {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        System.out.print("Nhap n: ");
        int n = in.nextInt();
        System.out.println("=== Bang cuu chuong " + n + " ===");
        int i=1;    
        while(i<= 10){
            System.out.println(n+" x "+i+" = "+(n*i));
            i++;
        }
    }
}

2.3 Viết chương trình in ra bảng cửu chương 2 đến bảng cửu chương 9, dùng phương thức gọi hàm và các vòng lặp lồng nhau

Code:
public class Baitap_BangCuuChuong {
    
    public static void main(String[] args) {
        
        for(int n = 2; n < 10; n++ ){
            inBangCuuChuong(n);
        }
    }
    
    static void inBangCuuChuong(int n){
        System.out.println();
        System.out.println("=== Bang cuu chuong " + n + " ===");
        int i=1;    
        while(i<= 10){
            System.out.printf("%d x %d = %d %n",n, i,(n*i));
            i++;
        }    
    }
}

P/s: Các bạn cũng có thể viết theo cách của mình 

Ví dụ 2.4:  Viết chương trình in ra bảng cửu chương 2 đến bảng cửu chương 9. Kết quả xuất theo hàng ngang của mỗi bảng cửu chương trên một cột

Gợi ý:
public class ForLongNhau {
    public static void main(String[] args) {
        for(int i=1;i<=10;i++){
            for(int j=2;j<=9;j++){
                System.out.printf("%d x %d = %d \t", j, i, i*j); // chú ý i, j
            }
            System.out.println("");
        }
    }
}

2.5 Viết chương trình tính trung bình cộng các số chia hết cho 3 từ 27 đến 33

Code:
public class Vidu_2_5 {
    public static void main(String[] args) {
        int min = 27, max= 33;        
        int i=0,dem=0,tong = 0;
        i=min;
        while(i <= max){
            if(i%3 ==0){
                tong += i;
                dem++;
            }         
            i++;
        }
        System.out.printf("TB cac so CHIA HET cho 3 tu %d den %d = %d",min,max,tong/dem);
    }
}


xong!

[Tự Học Java] MOB1014-Java 1 - Bài 2 - Java Exceptions - Try...Catch P2/2

NỘI DUNG:
1. Try Catch là gì?
2. Từ khóa Final
3. Các kiểu exception


THỰC HIỆN:

1. Try Catch là gì?
Khi chạy chương trình, có rất nhiều loại lỗi khác nhau có thể xảy ra như: lỗi do người viết code, lỗi cú pháp, sai thông thông tin đầu vào, ... và những lỗi mà không thể lường trước được. Và khi có lỗi, Java sẽ dừng lại và hiện thị thông tin lỗi ra màn hình, chúng ta thường được gọi là 'throw an exception/error'.

Try Catch có nhiệm vụ bắt (Catch) các lỗi mà thực tế có thể xảy ra để xử lý sao cho chương trình thân thiện với người dùng hơn, và chương trình của chúng ta có thể chạy tiếp tục.

Cú pháp:
try {
            //  KHỐI LỆNH cần thực thi
     }
     catch(Exception e) { //tham số e là tên lỗi muốn xử lý
            //  KHỐI LỆNH xử lý lỗi
     }

Ví dụ 1: Viết chương trình đọc dữ liệu nhập vào từ bàn phím, nếu dữ liệu nhập vào là số thì hiển thị thông báo "Bạn đã nhập đúng" ngược lại hiển thị "Dữ liệu bạn nhập không phải là số"

Code:
public class Vidu_2_2_trycatch {
    public static void main(String[] args) {
        int a;
        Scanner duLieuNhap = new Scanner(System.in);   
        try {
            System.out.print("Nhap so: ");
            a = duLieuNhap.nextInt();
            System.out.println("Ban da nhap dung!");
        }catch(Exception ex){
            System.out.println("Du lieu ban nhap KHONG PHAI so!");

        }
    }
}

2. Từ khóa Final
Có ý nghĩa sẽ chạy những dòng code sau khi kết thúc try catch, nó không quan tâm là try ... catch có lỗi hay không.

Ví dụ 2:
public class Vidu_2_2_trycatch {
    public static void main(String[] args) {
        int a;
        Scanner duLieuNhap = new Scanner(System.in);   
        try {
            System.out.print("Nhap so: ");
            a = duLieuNhap.nextInt();
            System.out.println("Ban da nhap dung!");
        }catch(Exception ex){
            System.out.println("Du lieu ban nhap KHONG PHAI so!");

        }finally {
            System.out.println("Try catch da CHAY XONG, code nay chay SAU CUNG.");
        }
    }
}

3. Các kiểu exceptionCó 2 kiểu ngoại lệ trong Java:
  • Checked Exceptions: Các ngoại lệ này thường là bị buộc phải bắt hoặc khai báo. Nếu quy tắc này không được tuân theo thì trình biên dịch sẽ không thực thi chương trình.
  • Unchecked Exceptions và error: Ngoại lệ này thường là do viết code sai, truyền đối null hoặc tham số không chính xác...
Các ngoại lệ kiểu Checked Exceptions phổ biến:
  • IOException: Ngoại lệ liên quan đến file input / output
  • SQLException: Ngoại lệ liên quan đến cú pháp SQL
  • DataAccessException: Ngoại lệ liên quan đến việc truy cập CSDL
  • ClassNotFoundException: Bị ném khi JVM không thể tìm thấy một lớp mà nó cần, do lỗi dòng lệnh, sự cố đường dẫn hoặc tệp, class bị thiếu...
  • InstantiationException: Ngoại lệ khi cố gắng tạo đối tượng của một abstract class hoặc interface

Các ngoại lệ kiểu Unchecked Exceptions phổ biến:
  • NullPointerException: Ngoại lệ bị ném ra khi cố gắng truy cập một đối tượng có biến tham chiếu có giá trị hiện tại là null
  • ArrayIndexOutOfBound: Ngoại lệ khi cố gắng truy cập một phần tử vượt quá độ dài của mảng
  • IllegalArgumentException: Ngoại lệ bị ném ra khi một phương thức nhận được một đối số được định dạng khác với phương thức mong đợi.
  • IllegalStateException: Ngoại lệ bị ném ra khi trạng thái của môi trường không phù hợp với hoạt động cố gắng thực hiện, ví dụ: Sử dụng Scanner đã bị đóng.
  • NumberFormatException: Ngoại lệ bị ném khi một phương thức chuyển đổi một Chuỗi thành số nhưng không thể chuyển đổi.
  • ArithmeticException: Lỗi số học, chẳng hạn như chia cho 0.

P/s: Try ... catch chạy rất tốn tài nguyên, nên khi code chúng ta nên hạn chế nhất có thể việc sử dụng try catch

xong!

[Tự Học Java] MOB1014-Java 1 - Bài 2 - Toán Tử, Kiểu Dữ Liệu, Ép Kiểu, Cấu Trúc Rẽ Nhánh P1/2

NỘI DUNG:
1. Toán tử
2. Kiểu Dữ Liệu
3. Cấu trúc rẽ nhánh
4. Cách gọi hàm trong java
5. Bài tập làm thêm
  • Giải phương trình bậc nhất
  • Giải phương trình bậc hai
  • Tính tiền điện
  • Viết chương trình tổ chức menu để gọi các yêu cầu trên

THỰC HIỆN
1. Toán tử
1.1: Toán tử toán học
Toán Tử Giải Thích Ví Dụ
+ Phép cộng a + b
- Phép trừ a - b
* Phép nhân a * b
/ Phép chia lấy nguyên a / b
% Phép chia lấy dư 5 % 2 = 1; vì 5 chia 2 bằng 2 DƯ 1
++ Tăng giá trị ... lên 1 đơn vị ++a
-- Giảm giá trị ... xuống 1 đơn vị --a

Ví dụ 1.1.1
public class Vidu_1_1_toantu_sohoc {
    public static void main(String[] args) {
        int a = 20;
        int b = 3;
        System.out.println("a + b = " + (a + b));
        System.out.println(a + " - " + b + " = " + (a - b));
        System.out.printf("%d * %d = %d %n", a, b, a * b);
        System.out.printf("%d / %d = %d LAY PHAN NGUYEN%n", a, b, a / b); // 20 / 3 = 6 du 2. Lay PHAN NGUYEN
        System.out.printf("%d %% %d = %d LAY PHAN DU%n", a, b, a % b); // 20 / 3 = 6 du 2. Lay PHAN DU
    }
}

Ví dụ 1.1.2
public class Vidu_1_1_toantu_congcong_trutru {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a++); // IN ra roi moi tang
        System.out.println(++a); // TANG roi moi in
        
        System.out.println(a+++1); // CONG 1, In ra roi tang them 1
        System.out.println(++a+1); // TANG 1, CONG 1, IN ra
        System.out.println(a);
                  
    }
}

Ví dụ 1.1.3
public class Vidu_1_1_toantu_congcong_trutru {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a++); // IN ra roi moi tang
        System.out.println(++a); // TANG roi moi in
        
        System.out.println(a+++1); // CONG 1, In ra roi tang them 1
        System.out.println(++a+1); // TANG 1, CONG 1, IN ra
        System.out.println(a);
                  
    }
    public static void main_trutru_truoc(String[] args) {
        int a = 20;
        int b = 0;

        // gán b = a - 1
        b = --a;
        System.out.println("a = " + a);
        System.out.println("b = " + b);        
                
    }    
    public static void main_congcong_truoc(String[] args) {
        int a = 20;
        int b = 0;

        // gán b = a + 1
        b = ++a;
        System.out.println("a = " + a);
        System.out.println("b = " + b);        
                
    }    
    public static void main_trutru_sau(String[] args) {
        int a = 20;
        int b = 0;

        // gán b = a, sau do GIAM a xuong 1 don vi
        b = a--;
        System.out.println("a = " + a);
        System.out.println("b = " + b);        
                
    }
    public static void main_congcong_sau(String[] args) {
        int a = 20;
        int b = 0;
        
        // gán b = a, sau do TANG a len 1 don vi
        b = a++;
        System.out.println("a = " + a);
        System.out.println("b = " + b);    
                
    }
}

1.2: Toán tử gán
Toán Tử Ví Dụ Giá Trị Tương Đương
= a = 5 a = 5
+= a += 5 a = a + 5
-= a -= 5 a = a - 5
-= a -= 5 a = a - 5
*= a *= 5 a = a * 5
/= a /= 5 a = a / 5
%= a %= 5 a = a % 5

1.3 Toán tử so sánh:
Toán Tử Giải Thích Ví Dụ
== Bằng a == b
!= Không bằng hay khác a != b
> Lớn hơn a > b
< Nhở hơn a < b
>= Lớn hơn hoặc bằng a >=b
<= Nhở hơn hoặc bằng a <= b

Ví dụ:
public class Vidu_1_3_toantu_sosanh {
    public static void main(String[] args) {
        int a = 20;
        int b = 10;
        boolean ketQua = false;

        ketQua = a == b;
        System.out.println(a + " = " + b + " la: " + ketQua );

        ketQua = a != b;
        System.out.println(a + " != " + b + " la: " + ketQua );
        
        ketQua = a > b;
        System.out.println(a + " > " + b + " la: " + ketQua );

        ketQua = a < b;
        System.out.println(a + " < " + b + " la: " + ketQua );  
        
        ketQua = a <= b;
        System.out.println(a + " <= " + b + " la: " + ketQua ); 
        
        ketQua = a >= b;
        System.out.println(a + " >= " + b + " la: " + ketQua );         
        
    }
}


1.4 Toán tử logic:
Toán Tử Tên Giải Thích Ví Dụ
&& Nếu tất cả các giá trị đúng thì trả về giá trị True x < 5 && x < 10
|| Hoặc Trả về giá trị True nếu trong các giá trị là true x < 5 || x < 4
! Phủ định, đảo ngược kết quả, trả về false nếu kết quả trả về là True !(x < 5 && x < 10)

Ví dụ:
public class Vidu_1_4_toantu_logic {
    public static void main(String[] args) {
        int a = 20;
        int b = 10;
        boolean ketQua = false;
        
        ketQua = (a > b) && (a >= b);
        //ketQua = true && true => true
        System.out.println(ketQua);
        
        ketQua = (a > b) || (a >= b);
        //ketQua = true || true => true
        System.out.println(ketQua);   
        
        ketQua = !(a > b) ;
        //ketQua = true  lấy phủ định => false
        System.out.println(ketQua);
    }
}

2. Kiểu dữ liệu
  • Kiểu Nguyên Thủy
Kiểu Độ dài (bit) Phạm vi biểu diễn
byte 8 -128 đến 127
char 16 '\u0000' đến '\uFFFF'
boolean 1 'true' hoặc 'false'
short 16 -32768 đến 32767
int 32 -2,147,483,648 đến 2,147,483,647
long 64 -9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807
float 32 1.2E-38 tới 3.4E+38
double 64 2.3E-308 tới 1.7E+308

  • Giá trị hằng - Literal: Các dữ liệu có giá trị cố định, được thể hiện trực tiếp trong chương trình mà không cần qua tính toán và có thể được gán cho bất kỳ kiểu dữ liệu nguyên thủy nào trong Java
Ví dụ:
public class Vidu_2_kieudulieu_literal {
    public static void main(String[] args) {
        int i = 1234;
        double d = 12.34;
        char ch = 'A';
        String str = "Literal trong Java";
        boolean b = false;
        
        System.out.println(i);
        System.out.println(d);
        System.out.println(ch);
        System.out.println(str);
        System.out.println(b);
        
    }
}

  • Hằng số: Hằng cũng tương tự như biến, nhưng đặc biệt ở chỗ nếu một biến được khai báo là hằng thì nó sẽ không được thay đổi giá trị trong suốt chương trình. Để khai báo một hằng số, bạn cũng khai báo giống như biến nhưng thêm final vào trước khai báo.
Ví dụ:
final int NAM_SINH = 2003;
final char KY_TU = 'D';

  • Chuyển đổi kiểu dữ liệu - Ép kiểu - Type Casting
- Nới rộng - Widening Casting (automatically): Chuyển đổi kiểu dữ liệu có kích thước nhỏ sang kiểu dữ liệu có kích thước lớn hơn (byte-> short-> char-> int-> long-> float->double) nhưng KHÔNG LÀM MẤT THÔNG TIN

Ví dụ:
public class Vidu_2_epkieu_tudong {
    public static void main(String[] args) {
    int soNguyen = 9;
    double soDouble = soNguyen; // tu dong chuyen int to double

    System.out.println(soNguyen);      // Outputs 9
    System.out.println(soDouble);   // Outputs 9.0
  }
}
- Thu hẹp - Narrowing Casting (manually): Chuyển đổi kiểu dữ liệu có kích thước lớn sang kiểu dữ liệu có kích thước nhỏ hơn (double -> float -> long -> int -> char -> short -> byte) sẽ LÀM MẤT THÔNG TIN

Ví dụ:
public class Vidu_2_epkieu_thucong {
    public static void main(String[] args) {
    double soDouble = 9.78d;
    int soNguyen = (int) soDouble; // tu dong chuyen double to int

    System.out.println(soDouble);   // Outputs 9.78
    System.out.println(soNguyen);      // Outputs 9
  }
}

3. Cấu trúc rẽ nhánh
3.1 Mệnh đề IF
  • Dạng thiếu:
Ví dụ 3.1.1: 
Viết chương trình nhập đọc số Interger từ bàn phím và in ra: Nếu số nhập vào > 18 thì in ra dòng chữ "Ban duoc phep uong BIA"

Code:
import java.util.Scanner; 
public class Vidu_3_1_1_dangthieu {
    public static void main(String[] args) {
        int soNguyen;
        Scanner duLieuvao = new Scanner(System.in);
        System.out.print("Nhap vao so nguyen: ");            
        soNguyen = duLieuvao.nextInt();
        
        if (soNguyen > 18){
            System.out.println("Ban duoc phep uong BIA");
        }
    }
}

  • Dạng đầy đủ:
Ví dụ 3.1.2: 
Viết chương trình nhập đọc số Interger từ bàn phím và in ra: Nếu số nhập vào > 18 thì in ra dòng chữ "Ban duoc phep uong BIA", ngược lại (< 18) thì in ra dòng chữ "Ban chi duoc uong NUOC NGOT"

Code:
import java.util.Scanner; 
public class Vidu_3_1_2_dangdu{
    public static void main(String[] args) {
        int soNguyen;
        Scanner duLieuvao = new Scanner(System.in);
        System.out.print("Nhap vao so nguyen: ");            
        soNguyen = duLieuvao.nextInt();
        
        if (soNguyen > 18){
            System.out.println("Ban duoc phep uong BIA");
        } else {
            System.out.println("Ban chi duoc uong NUOC NGOT");
        }
    }
}

  • Dạng IF ... ELSE IF ... ELSE:
Ví dụ 3.1.3:
Viết chương trình nhập đọc số Interger từ bàn phím và in ra, nếu số nhập vào:
  • < 5:  in ra màn hình "YEU"
  • < 7:  in ra màn hình "Trung Binh"
  • ngược lại: in ra màn hình "Kha Gioi"
Code:
import java.util.Scanner; 
public class Vidu_3_1_3_ifelseifelse {
    public static void main(String[] args) {
        int soNguyen;
        Scanner duLieuvao = new Scanner(System.in);
        System.out.print("Nhap vao so nguyen (DIEM): ");            
        soNguyen = duLieuvao.nextInt();
        
        if (soNguyen < 5 ){
            System.out.println("YEU");
        } else if (soNguyen < 7) {
            System.out.println("Trung Binh");
        } else {
            System.out.println("Kha Gioi");
        }
    }
}
Ví dụ 3.1.4:
Viết chương trình nhập đọc số Interger từ bàn phím và in ra, nếu số nhập vào:
  • < 5:  in ra màn hình "YEU"
  • < 7:  in ra màn hình "Trung Binh"
  • < 9:  in ra màn hình "Kha"
  • ngược lại: in ra màn hình "Gioi"
Code:
import java.util.Scanner; 
public class Vidu_3_1_4 {
public static void main(String[] args) {
        int soNguyen;
        Scanner duLieuvao = new Scanner(System.in);
        System.out.print("Nhap vao so nguyen (DIEM): ");            
        soNguyen = duLieuvao.nextInt();
        
        if (soNguyen < 5 ){
            System.out.println("YEU");
        } else if (soNguyen < 7) {
            System.out.println("Trung Binh");
        } else if (soNguyen < 9) {
            System.out.println("Kha");
        } else {
            System.out.println("Gioi");
        }
    } 
}

Tuy nhiên với code trên chúng ta thấy dòng System.out.println lặp lại nhiều lần và nếu có thay đổi nội dung thông báo cũng rất bất tiện, nên chúng ta cũng có thể viết lại như sau:

Code:
public class Vidu_3_1_4 {
    public static void main(String[] args) {
        int soNguyen;
        String xepLoai = "";
        Scanner duLieuvao = new Scanner(System.in);
        System.out.print("Nhap vao so nguyen (DIEM): ");            
        soNguyen = duLieuvao.nextInt();
        
        if (soNguyen < 5 ){
            xepLoai = "YEU";
        } else if (soNguyen < 7) {
            xepLoai = "Trung Binh";
        } else if (soNguyen < 9) {
            xepLoai = "Kha";
        } else {
            xepLoai = "Gioi";
        }
        //System.out.println("Xep loai cua ban: " + xepLoai);
        // hoac
        System.out.printf("Xep loai cua ban: %s %n", xepLoai);
    } 
}

3.2 Switch ...case
Cũng tương tự như if ... else tuy nhiên nếu số trường hợp lớn 3 chúng ta nên dùng switch ... case để code dễ nhìn hơn.

Ví dụ 3.2:
Viết chương trình nhập đọc số Interger từ bàn phím và in ra, nếu số nhập vào:
  • 2: Thứ hai
  • 3: Thứ ba
  • 4: Thứ tư
  • 5: Thứ năm
  • 6: Thứ sau
  • 7: Thứ 7
  • 8: Chủ nhật
  • 1: Chủ nhật
  • Không phải các số trên: không hợp lệ

Code:
import java.util.Scanner;
public class Vidu_3_2 {
    public static void main(String[] args) {
        int soNguyen;
        String ketQua = "";
        Scanner duLieuvao = new Scanner(System.in);
        System.out.print("Nhap vao so nguyen: ");            
        soNguyen = duLieuvao.nextInt();
        switch (soNguyen) {
            case 2:
                ketQua = "Thu hai";
                break; // dùng break để thoát khỏi switch
            case 3:
                ketQua = "Thu ba";
                break;
            case 4:
                ketQua = "Thu tu";
                break;
            case 5:
                ketQua = "Thu nam";
                break;
            case 6:
                ketQua = "Thu sau";
                break;  
            case 7:
                ketQua = "Thu bay";
                break;   
            case 1: // vì không có break nên chương trình tiếp tục chuyển sang case 8
            case 8:
                ketQua = "CHU NHAT";
                break;                
            default:
                ketQua = "KHONG HOP LE!";
        }
        System.out.println(ketQua);
    }
}

Ngoài ra chúng ta cũng còn có cách viết khác
public class Vidu_3_2 {
    public static void main(String[] args) {
        int soNguyen;
        String ketQua = "";
        Scanner duLieuvao = new Scanner(System.in);
        System.out.print("Nhap vao so nguyen: ");            
        soNguyen = duLieuvao.nextInt();
        ketQua = switch (soNguyen) {
            case 2 -> "Thu hai";
            case 3 -> "Thu ba";
            case 4 -> "Thu tu";
            case 5 -> "Thu nam";
            case 6 -> "Thu sau";
            case 7 -> "Thu bay";
            case 1, 8 -> "CHU NHAT";
            default -> "KHONG HOP LE!";
        }; 
        System.out.println(ketQua);
    }
}

4. Cách gọi hàm trong java
Viết chương trình mô phỏng máy tính điện tử với các yêu cầu:
  • Đọc số thứ nhất và số thứ hai là 2 số nguyên nhập từ bàn phím
  • Thực hiện các phép tính cộng, trừ, nhân, chia (phép toán yêu cầu người dùng nhập từ bàn phím), các phép tính viết theo dạng hàm.
Dùng switch ... case
Code :
import java.util.Scanner;

public class Vidu_4_goiham {
    public static void main(String[] args) {
        menu();
    }
    static void menu(){
        System.out.println("1. Phep cong");
        System.out.println("2. Phep tru");
        System.out.println("3. Phep nhan");
        System.out.println("4. Phep chia");        
        System.out.println("0. KET THUC CHUONG TRINH");
        
        Scanner scanner = new Scanner(System.in);
        System.out.print("Chon chuc nang?: ");
        int so = scanner.nextInt();
        switch(so){
            case 1: phepCong(); break;
            case 2: phepTru(); break;
            case 3: phepNhan(); break;
            case 4: phepChia(); break;
            case 0: // khong lam gi ca
            default: System.exit(0); // các so khong phai la cac phep tinh
        }
        //...
    }        
        static void phepCong(){
            Scanner in = new Scanner(System.in);
            System.out.print("Nhap a: ");
            int a = in.nextInt();
            System.out.print("Nhap b: ");
            int b = in.nextInt();
            System.out.println( a + " + " + b + " = " + ( a + b));        
        }
        static void phepTru(){ // xuat ra theo kieu co dinh dang
            Scanner in = new Scanner(System.in);
            System.out.print("Nhap a: ");
            int a = in.nextInt();
            System.out.print("Nhap b: ");
            int b = in.nextInt();
            int c = a - b;
            System.out.printf("%d - %d = %d %n", a, b, c); // in ket qua xong xuong hang
        } 
        static void phepNhan(){
            System.out.println ("PHEP NHAN cac ban tu lam");
        }
        
        static void phepChia(){
            System.out.println ("PHEP CHIA cac ban tu lam");
        }
}

Dùng IF ... ELSE
Các bạn tự làm!


5. Bài tập làm thêm
  • Giải phương trình bậc nhất: Viết chương trình cho phép giải phương trình bậc nhất trong đó các hệ số a và b nhập từ bàn phím

Code:
import java.util.Scanner;
public class Lab_2_1_phuongtrinh_bacnhat {
        public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int a,b;
        System.out.print("Nhap he so a: ");
        a = scan.nextInt();
        System.out.print("Nhap he so b: ");
        b = scan.nextInt();
        if(a==0){
            if(b==0){
                System.out.println("PT vo so nghiem!");
            }else{
                System.out.println("PT vo nghiem");
            }
        }else{
            System.out.println("Nghiem x="+(-b/a));
        }
    }
}

  • Giải phương trình bậc hai:  Viết chương trình cho phép giải phương trình bậc hai trong đó các hệ số a, b và c nhập từ bàn phím
Code:
import java.util.Scanner;
public class Lab_2_2_phuongtrinh_bachai {
    public static void main(String[] args) {
        double a, b, c, delta, x1, x2;
        Scanner scan = new Scanner(System.in);
          
        System.out.println("Giai phuong trinh bac hai:");
        System.out.print("Nhap he so a: ");
        a = scan.nextDouble();
        System.out.print("Nhap he so b: ");
        b = scan.nextDouble();
        System.out.print("Nhap he so c: ");
        c = scan.nextDouble();

        delta = (b * b) - (4 * a * c);
           if(delta>0){
                System.out.println("Phuong trinh da cho co hai nghiem.");
                x1 = ((-b) + Math.sqrt(delta)) / (2 * a);
                x2 = ((-b) - Math.sqrt(delta)) / (2 * a);
                System.out.println("x1 = "+ x1);
                System.out.println("x2 = " + x2);
           }else if(delta==0){
                System.out.println("Phuong trinh da cho co hai nghiem kep.");
                x1 = x1 = (-b) / (2 * a);
                System.out.println("x1 = x2 = " + x1);
           }else{
               System.out.println("Phuong trinh da cho vo nghiem.");
           }          
    } 
}

  • Tính tiền điệnViết chương trình nhập vào số điện sử dụng của tháng và tính tiền điện theo phương pháp lũy tiến
Code:
import java.util.Scanner;
public class Lab_2_3_tinhtiendien {
    public static void main(String[] args) {
        int sodien;
        Scanner scan = new Scanner(System.in); 
        System.out.print("So kg dien: ");
        sodien = scan.nextInt();
        System.out.println("----------------");
        if(sodien <= 50){
            System.out.println("So kg dien: "+sodien);
            System.out.println("So tien:"+(sodien*1000));
        }else{
            System.out.println("So kg dien: "+sodien);
            System.out.println("So kg dien vuot han muc: "+(sodien-50));
            System.out.println("So tien:"+((50*1000)+(sodien - 50)*1200));
        }
    }
}

  • Menu: Viết chương trình tổ chức 1 menu gồm 3 chức năng để gọi 3 bài trên và một chức năng để thoát khỏi ứng dụng

Code:
import java.util.Scanner;
public class Lab_2_4_menu {
    public static void main(String[] args) {
        menu(args);
    }   
    static void menu(String[] args){
        System.out.println("1. Giai phuong trinh bac nhat");
        System.out.println("2. Giai phuong trinh bac 2");
        System.out.println("3. Tinh tien dien");
        System.out.println("0. Exit");
        Scanner scanner = new Scanner(System.in);
        System.out.print("Chon chuc nang?: ");
        int luaChon = scanner.nextInt();
        switch(luaChon){
            case 1 -> Lab_2_1_phuongtrinh_bacnhat.main(args);
            case 2 -> Lab_2_2_phuongtrinh_bachai.main(args);
            case 3 -> Lab_2_3_tinhtiendien.main(args);
            case 0 -> System.exit(0);
        }
    }
}

Hoặc các bạn cũng có thể viết các gọi hàm thông thường (Viết nhiều hàm trong 1 file, tham khảo mục 4)

Xong!
/*header slide*/