/*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 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!

No comments:

Post a Comment

/*header slide*/