Wednesday, April 27, 2016

Ngăn xếp cài đặt bằng danh sách liên kết đơn

Ngăn xếp là danh sách tuyến tính , mà phép bổ sung và loại bỏ thực hiện theo nguyên tắc vào sau ra trước. Khi cài đặt ngăn xếp bằng danh sách liên kết đơn phần tử đỉnh của ngăn xếp chính là nút đầu tiên của danh sách liên kết. Phép bổ sung và loại bỏ được thực hiện ở vị trí này.






1, Giải thuật bổ sung một phần tử vào ngăn xếp:


Procedure    Push(var T,X)
1,{Tạo một node mới có infor là X}
new <= AVAIL;
infor(new):=x;
link(new):=x;
2,{Bổ sung}
link(new):=T;
T:=new;
return.
// Chuyển sang hàm trong C;
Ban đầu ta có cấu trúc của node là:

typedef struct node NODE;
struct node
{
         int  infor;
        NODE *link;
};
// -------------------
void Push(NODE *T,int x)
{
       //tạo một nút mới
        NODE *N;
        N=(NODE*) malloc(sizeof(NODE));
        N->infor=x;
        N->link=NULL;
        //bổ sung
        N->link=T;
        T=N;
}

2, Giải thuật loại bỏ 1 phần tử khỏi ngăn xếp

Function   POP(var T)
1,{Kiểm tra ngăn xếp rỗng }
   if T=NULL then
   begin
       write('Ngan xep rong');
        return ;
   end
2,{Loại bỏ}
P:=T;
tg:==infor(T);
T:=link(T);
P=>AVAIL;
POP:=tg;
Return.

//Chuyen sang hàm trong c
//Ban đầu ta cũng có cấu trúc một nút như bên trên 
int POP(NODE *T)
{
       NODE *P:
       P=T;
       int tg=0;
      //Kiểm tra ngăn xếp rỗng

       if(T==NULL)

       {
                printf("Ngăn xếp rỗng.!");
                return 0;
       }
     
       tg=T->infor;//lấy thông tin của nút đỉnh 
       T=T->link;//cho T trỏ tới nút tiếp theo
       free(P);//xóa  bỏ nút đỉnh
       return tg;//trả về thông tin của nút bị loại bỏ
}
P=>AVAIL, P<=AVAIL để biểu thị việc thu hổi và cấp phát bộ nhớ.!
Lưu ý: với cách cài đặt này T phải là biến toàn cục vì trong ngôn ngữ C không có kiểu tham chiếu mà chỉ có tham trị. Khi truyền theo giá trị thì biến sẽ không bị thay đổi khi.

Bài tập hướng đối tượng với Java (số 8)

//Họ Tên: Trần Văn Linh
//MaSV:581597
//Lớp:K58QLTT

Đề:
1. Hãy xây dựng lớp DaGiac gồm có các thuộc tính
- Số cạnh của đa giác
- Mảng các số nguyên chứa kích thước các cạnh của đa giác
Các phương thức:
- Tính chu vi
- In giá trị các cạnh của đa giác.
2. Xây dựng lớp TamGiac kế thừa từ lớp DaGiac, trong đó viết đè các hàm tính chu vi và xây dựng thêm
phương thức kiểm tra tính hợp lệ 3 cạnh của tam giác, tính diện tích tam giác
3. Xây dựng một ứng dụng Java để nhập vào một dãy gồm n tam giác rồi in ra màn hình các cạnh của các tam giác có diện tích lớn nhất.
--------------------------------------------------------------------------------------------------------------------------

Giải:
//Lớp DaGiac

public class DaGiac
{
    protected int soCanh;
    protected int a[];
 
    public DaGiac()
    {
     
    }
    public DaGiac(int soCanh,int a[])
    {
        this.soCanh=soCanh;
        this.a=a;
    }
    public int tinhChuVi()
    {
        int cv=0;
        for(int i=0;i<this.soCanh;i++)
            cv=cv+a[i];
        return cv;
    }
    public void inCanh()
    {
        for(int i=0;i<this.soCanh;i++)
        {
            System.out.println("Canh thu "+(i+1)+" : "+this.a[i]);
        }
    }
}
//Lớp TamGiac
import java.util.Scanner;
public class TamGiac extends DaGiac
{
    TamGiac()
    {
        this.a=new int[3];
        this.soCanh=3;
    }
    public int  tinhChuVi()
    {
        int cv=0;
        for(int i=0;i<3;i++)
             cv=+a[i];
           
        return cv;
    }
    public boolean ktHopLe()
    {
        int A=this.a[0];
        int B=this.a[1];
        int C=this.a[2];
        if(A+B>C && A+C>B && B+C>A)
            return true;
        return false;
    }
    public double tinhDT()
    {
        int A=this.a[0];
        int B=this.a[1];
        int C=this.a[2];
        int P=(A+B+C)/2;
        return (double) Math.sqrt(P*(P-A)*(P-B)*(P-C));
    }
    public void nhap()
    {
        Scanner sc=new Scanner(System.in);
        for(int i=0;i<3;i++)
        {
            System.out.print("Nhap canh thu "+(i+1)+": ");
            this.a[i]=sc.nextInt();
        }
    }
}
//Lop test
import java.util.ArrayList;
public class Test
{
    public static void main(String[] args)
    {
        ArrayList<TamGiac> ds=new ArrayList<TamGiac>();
        for(int i=0;i<4;i++)
        {
            System.out.println("Nhap tam giac thu "+(i+1)+" :");
            TamGiac tg=new TamGiac();
            tg.nhap();
            ds.add(tg);
        }
        double max=0;
        int Max=0;
        for(int i=0;i<ds.size();i++)
            if(ds.get(i).ktHopLe())
            {
               if(ds.get(i).tinhDT()>max)
               {
                    max=ds.get(i).tinhDT();
                    Max=i;
               }
           }
        System.out.println("Tam Giac Co Dien tich lon nhat la: "+max+", cac canh cua tam giac nay : ");
        ds.get(Max).inCanh();
    }
 

}




Bài tập trình hướng đối tượng với Java (Số 7)

//Họ Tên: Trần Văn Linh
//MaSV:581597
//Lớp:K58QLTT

Đề :
Một công ty được giao nhiệm vụ quản lý các phương tiện giao thông gồm các loại: ô tô, xe máy, xe tải.
+ mỗi loại phương tiện giao thông cần quản lý: Hãng sản xuất, năm sản xuất, giá bán và màu.
+ Các ô tô cần quản lý: số chỗ ngồi, kiểu động cơ
+ Xe máy cần quản lý: công suất
+ Xe tải cần quản lý: trọng tải.
2. Xây dựng các lớp XeTai, XeMay, OTo kế thừa từ lớp PTGT.
3. Xây dựng các hàm để truy nhập (get), thay đổi (set) và hiển thị các thuộc tính của các lớp.
4. Xây dựng lớp QLPTGT cài đặt các phương thức thực hiện các chức năng sau:
- Nhập đăng ký phương tiện
- Tìm phương tiện theo màu hoặc năm sản xuất

--------------------------------------------------------------------------------------------------------------------------

Giải:/
//Lop PTGT
import java.util.Date;
public class PTGT
{
    private String hangSX;
    private int namSX;
    private double gia;
    private String mau;
 
    public PTGT()
    {
    }
    public PTGT(String hangSX,int namSX,double gia,String mau)
    {
        this.hangSX=hangSX;
        this.namSX=namSX;
        this.gia=gia;
        this.mau=mau;
    }
 
    public void setHangSx(String hangSX)
    {
        this.hangSX=hangSX;
    }
    public void setNamSx(int namSX)
    {
        this.namSX=namSX;
    }
    public void setGia(double gia)
    {
        this.gia=gia;
    }
    public void setMau(String mau)
    {
        this.mau=mau;
    }
 
    public String getHangSX()
    {
        return this.hangSX;
    }
    public int getNamSX()
    {
        return this.namSX;
    }
    public double getGia()
    {
        return this.gia;
    }
    public String getMau()
    {
        return this.mau;
    }
 
    public void hienThongTin()
    {
        System.out.println("Hang san xuat: "+this.hangSX);
        System.out.println("Nam san xuat: "+this.namSX);
        System.out.println("Gia : "+this.gia);
        System.out.println("Mau: "+this.mau);
     
    }

}
//Lop XeTai

public class XeTai extends PTGT
{
    private double trongTai;
    
    public XeTai()
    {
    
    }
    public XeTai(String hangSX,int namSX,double gia,String mau,double trongTai)
    {
        super(hangSX,namSX,gia,mau);
        this.trongTai=trongTai;
    }
    
    public void setTrongTai(double trongTai)
    {
        this.trongTai=trongTai;
    }
    public double getTrongTai()
    {
        return this.trongTai;
    }
    
    public void hienThongTin()
    {
        super.hienThongTin();
        System.out.println("Trong tai cua xe la: "+this.trongTai);
    }
}
//Lop Oto

public class Oto extends PTGT
{
    private int soCho;
    private String kieuDongCo;
    
    public Oto()
    {
    }
    public Oto(String hangSX,int namSX,double gia,String mau,int soCho,String kieuDongCo)
    {
        super(hangSX,namSX,gia,mau);
        this.soCho=soCho;
        this.kieuDongCo=kieuDongCo;
    }
    
    public void setSoChoNgoi(int soCho)
    {
        this.soCho=soCho;
    }
    public void setKieuDongCo(String kieuDongCo)
    {
        this.kieuDongCo=kieuDongCo;
    }
    
    public void hienThongTin()
    {
        super.hienThongTin();
        System.out.println("So Cho ngoi: "+this.soCho);
        System.out.println("Kieu dong co: "+this.kieuDongCo);
    }
}
//Lop XeMay

public class XeMay extends PTGT
{
    private double congSuat; 
    
    public XeMay(String hangSX,int namSX,double gia,String mau,double congSuat)
    {
        super(hangSX,namSX,gia,mau);
        this.congSuat=congSuat;
    }
    
    public void setCongSuat(double congSuat)
    {
        this.congSuat=congSuat;
    }
    public double getCongSuat()
    {
        return this.congSuat;
    }
    
    public void hienThongTin()
    {
        super.hienThongTin();
        System.out.println("Cong Suat: "+this.congSuat);
    }
}
//lop QuanLyPhuongTienGT
import java.util.Date;
import java.util.ArrayList;
import java.util.Scanner;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class QuanLyPhuongTienGT
{
    private ArrayList<PTGT> ds=new ArrayList<PTGT>();
    
    public PTGT nhapOto(Scanner sc) 
    {
        System.out.print("Nhap hang san xuat: ");
        String hangSx=sc.nextLine();
        
        System.out.print("Nhap nam san xuat:");
        int namSX=sc.nextInt();
        
        System.out.print("Nhap gia xe:");
        double gia=sc.nextDouble();
        sc.nextLine();
        
        System.out.print("Nhap mau xe:");
        String mau=sc.nextLine();
        
        System.out.print("Nhap so cho ngoi:");
        int soCho=sc.nextInt();
        sc.nextLine();
        
        System.out.print("Nhap kieu dong co:");
        String kdc=sc.nextLine();
        
        return new Oto(hangSx,namSX,gia,mau,soCho,kdc);
    }
    public PTGT nhapXeMay(Scanner sc) 
    {
        System.out.print("Nhap hang san xuat: ");
        String hangSx=sc.nextLine();
        
        System.out.print("Nhap nam san xuat:");
        int namSX=sc.nextInt();
        
        System.out.print("Nhap gia xe:");
        double gia=sc.nextDouble();
        sc.nextLine();
        
        System.out.print("Nhap mau xe:");
        String mau=sc.nextLine();
        
        System.out.print("Nhap Cong Suat:");
        double congSuat=sc.nextDouble();
        sc.nextLine();
        
        return new XeMay(hangSx,namSX,gia,mau,congSuat);
    }
    public PTGT nhapXeTai(Scanner sc) 
    {
        System.out.print("Nhap hang san xuat: ");
        String hangSx=sc.nextLine();
        
        System.out.print("Nhap nam san xuat:");
        int namSX=sc.nextInt();
        
        System.out.print("Nhap gia xe:");
        double gia=sc.nextDouble();
        sc.nextLine();
        
        System.out.print("Nhap mau xe:");
        String mau=sc.nextLine();
        
        System.out.print("Nhap trong tai cua xe:");
        double trongTai=sc.nextDouble();
        sc.nextLine();
        
        return new XeTai(hangSx,namSX,gia,mau,trongTai);
    }
    public void  nhapDangKiPhuongTien(Scanner sc)
    {
        char c;
        int chon=0;
        while(true)
        {
            System.out.print("Ban muon nhap loai xe nao (1-XeTai,2-Xemay,3-Oto):");
            chon=sc.nextInt();
            sc.nextLine();
            switch(chon)
            {
                case 1:{
                    ds.add(nhapXeTai(sc));
                    break;
                }
                case 2:{
                    ds.add(nhapXeMay(sc));
                    break;
                }
                case 3:{
                    ds.add(nhapOto(sc));
                    break;
                }
                default:
                {
                    ds.add(nhapXeTai(sc));
                    break;
                }
            }
            System.out.println("Ban co muon nhap nua khong: (Y/N)");
            c=sc.nextLine().charAt(0);
            if(c=='N'||c=='n')
                break;
        }
    }
    public void timKiemTheoMau(Scanner sc)
    {
        System.out.print("Nhap mau can tim kiem:");
        String mauTk=sc.nextLine();
        for(int i=0;i<ds.size();i++)
        {
            String mau=ds.get(i).getMau();
            if(mau.equalsIgnoreCase(mauTk))
                ds.get(i).hienThongTin();
        }
    }
    public void timKiemTheoNamSX(Scanner sc)
    {
        System.out.print("Nhap nam  de tim kiem:");
        int nam=sc.nextInt();
        int tg=0;
        for(int i=0;i<ds.size();i++)
        {
           tg=ds.get(i).getNamSX();
           if(tg==nam)
                ds.get(i).hienThongTin();
        }
    }
    public static void main(String[] args)
    {
        QuanLyPhuongTienGT PT=new QuanLyPhuongTienGT();
        Scanner sc=new Scanner(System.in);
        PT.nhapDangKiPhuongTien(sc);
        PT.timKiemTheoMau(sc);
        PT.timKiemTheoNamSX(sc);
    }
}


Bài tập lập trình hướng đối tượng với Java (số 6)

//Họ Tên: Trần Văn Linh
//MaSV:581597
//Lớp:K58QLTT

Đề : Để quản lý các biên lai thu tiền điện, người ta cần các thông tin như sau:
- Với mỗi biên lai, có các thông tin sau: thông tin về hộ sử dụng điện, chỉ số cũ, chỉ số mới, số tiền phải
trả của mỗi hộ sử dụng điện
- Các thông tin riêng của mỗi hộ sử dụng điện gồm: Họ tên chủ hộ, số nhà, mã số công tơ của hộ dân sử dụng điện.
1. Hãy xây dựng lớp KhachHang để lưu trữ các thông tin riêng của mỗi hộ sử dụng điện.
2. Xây dựng lớp BienLai để quản lý việc sử dụng và thanh toán tiền điện của các hộ dân.
3. Xây dựng các phương thức nhập, và hiển thị một thông tin riêng của mỗI hộ sử dụng điện.
4. Cài đặt chương trình thực hiện các công việc sau:
+ Nhập vào các thông tin cho n hộ sử dụng điện
+ Hiển thị thông tin về các biên lai đã nhập
+ Tính tiền điện phải trả cho mỗi hộ dân, nếu giả sử rằng tiền phải trả được tính theo công thức sau:
số tiền phải trả=(Số mới - số cũ) * 750.

--------------------------------------------------------------------------------------------------------------------------
   Giải:
//Lop KhachHang
import java.util.Scanner;
public class KhachHang
{
    private String hoTen;
    private int soNha;
    private String maCongTo;
 
    public KhachHang()
    {
    }
    public KhachHang(String hoTen,int soNha,String maCongTo)
    {
        this.hoTen=hoTen;
        this.soNha=soNha;
        this.maCongTo=maCongTo;
    }
    //-----------
    public void nhapThongTin()
    {
        Scanner sc=new Scanner(System.in);
        System.out.print("Nhap ho ten khach hang:");
        this.hoTen=sc.nextLine();
        System.out.print("Nhap so nha :");
        this.soNha=sc.nextInt();
        sc.nextLine();
        System.out.print("Nhap ma cong to:");
        this.maCongTo=sc.nextLine();
    }
    public void hienThongTin()
    {
        System.out.println("Ho Ten: "+this.hoTen);
        System.out.println("So nha: "+this.soNha);
        System.out.println("Ma cong to: "+this.maCongTo);
    }
}
//Lớp BienLai
import java.util.Scanner;
public class BienLai
{
    private KhachHang kh;
    private int chiSoCu;
    private int chiSoMoi;
    private double tienTra;
    public BienLai()
    {
     
    }
    public BienLai(KhachHang kh,int chiSoCu,int chiSoMoi,double tienTra)
    {
        this.kh=kh;
        this.chiSoCu=chiSoCu;
        this.chiSoMoi=chiSoMoi;
        this.tienTra=tienTra;
    }
    //---------------------
    public void nhapThongTin()
    {
        Scanner sc=new Scanner(System.in);
        this.kh=new KhachHang();
        this.kh.nhapThongTin();
        System.out.print("Nhap chi so cu:");
        this.chiSoCu=sc.nextInt();
        System.out.print("Nhap chi so moi:");
        this.chiSoMoi=sc.nextInt();
        this.tienTra= (double)(this.chiSoMoi-this.chiSoCu)*750;
    }
    //--------------------
    public void hienThongTin()
    {
        this.kh.hienThongTin();
        System.out.println("Chi so cu: "+this.chiSoCu);
        System.out.println("Chi so moi: "+this.chiSoMoi);
        System.out.println("So tien phai tra: "+this.tienTra);
    }

}
//Lớp Test
import java.util.ArrayList;
import java.util.Scanner;
import java.util.InputMismatchException ;

public class Test
{
   public static void main(String[] args)
   {
       Scanner sc=new Scanner(System.in);
       int n;
       try
       {
           System.out.println("Ban muon nhap bao nhieu ho gia dinh : ");
           n=sc.nextInt();
       }catch(InputMismatchException e) //su ly ngoai le khi n khong phai la so
       {
           n=0;
       }
       
       ArrayList<BienLai> ds=new ArrayList<BienLai>(100);
       for(int i=0;i<n;i++)
       {
           BienLai b=new BienLai();
           b.nhapThongTin();
           ds.add(b);
       }
       for(int i=0;i<n;i++)
       {
           System.out.println("Ho gia dinh thu : "+(i+1));
           ds.get(i).hienThongTin();
           System.out.println("====================");
       }
   }
}

Bài tập lập trình hướng đối tượng với Java (Số 5)

//Họ Tên: Trần Văn Linh
//MaSV:581597
//Lớp:K58QLTT

Đề:
Thư viện của trường đại học KHTN có nhu cầu cần quản lý việc mượn sách. Sinh viên đăng ký và tham
gia mượn sách thông qua các thẻ mượn mà thư viện đã thiết kế.
- Với mỗi thẻ mượn, có các thông tin sau: số phiếu mượn , ngày mượn, hạn trả , số hiệu sách, và các thông tin riêng về mỗi sinh viên đó.
- Các thông tin riêng về mỗi sinh viên đó bao gồm: Họ tên, MSV, ngày sinh, lớp.
1. Hãy xây dựng lớp SinhVien để quản lý các thông tin riêng về mỗi sinh viên.
2. Xây dựng lớp TheMuon để quản lý việc mượn sách của mỗi đọc giả.
3. Xây dựng các phương thức để nhập và hiện thị các thông tin riêng cho mỗi sinh viên
4. In ra danh sách sinh viên, tên sách mượn cần trả vào ngày cuối tháng

--------------------------------------------------------------------------------------------------------------------------

 Giải:
//Lớp SinhVien
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Scanner;
public class SinhVien
{
    private String hoTen;
    private String mSV;
    private Date ngaySinh;
    private String lop;
 
    public SinhVien()
    {
     
    }
    public SinhVien(String hoTen,String mSV,Date ngaySinh,String lop)
    {
        this.hoTen=hoTen;
        this.mSV=mSV;
        this.ngaySinh=ngaySinh;
        this.lop=lop;
    }
    public void nhapThongTin() throws Exception
    {
        Scanner sc=new Scanner(System.in);
        System.out.print("Nhap ho ten: ");
        this.hoTen=sc.nextLine();
        System.out.print("Nhap ma sinh vien :");
        this.mSV=sc.nextLine();
        System.out.print("Nhap ngay sinh(dd-MM-yy):");
        String ns=sc.nextLine();
        DateFormat df=new SimpleDateFormat("dd-MM-yy");
        this.ngaySinh= df.parse(ns);
        System.out.print("Nhap lop: ");
        this.lop=sc.nextLine();
    }
    public void hienThongTin()
    {
        System.out.println("Ho va ten: "+this.hoTen);
        System.out.println("Ma sinh vien: "+this.mSV);
        System.out.println("Ngay sinh: "+this.ngaySinh);
        System.out.println("Lop : "+this.lop);
    }
 
    public String getHoTen()
    {
        return this.hoTen;
    }
    public String getMSV()
    {
        return this.mSV;
    }
    public Date getNgaySinh()
    {
        return this.ngaySinh;
    }
    public String getLop()
    {
        return this.lop;
    }
}
//Lớp TheMuon
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.util.ArrayList;
import java.io.PrintWriter;
public class TheMuon
{
    private int sPMuon;
    private Date ngayMuon;
    private Date ngayTra;
    private String soHieuSach;
    private SinhVien sv;
    public TheMuon()
    {
        
    }
    public TheMuon(int sPMuon,Date ngayMuon,Date ngayTra,String soHieuSach,SinhVien sv)
    {
        this.sPMuon=sPMuon;
        this.ngayMuon=ngayMuon;
        this.ngayTra=ngayTra;
        this.soHieuSach=soHieuSach;
        this.sv=sv;
    }
    
    public void nhapThongTin() throws Exception
    {
        this.sv=new SinhVien();
        this.sv.nhapThongTin();
        Scanner sc=new Scanner(System.in);
        System.out.print("Nhap so phieu muon:");
        this.sPMuon=sc.nextInt();
        sc.nextLine();
        System.out.print("Nhap so hieu sach: ");
        this.soHieuSach=sc.nextLine();
        this.ngayMuon=new Date();
        System.out.print("Nhap ngay tra:(dd-mm-yy): ");
        String ngt=sc.nextLine();
        DateFormat df=new SimpleDateFormat("dd-MM-yy");
        this.ngayTra=df.parse(ngt);
    }
    public int getNgayTra()
    {
        return this.ngayTra.getDate();
    }
    public void hienThongTin()
    {
        sv.hienThongTin();
        System.out.println("Ten sach tra: "+this.soHieuSach);
    }
  
    public static void main(String[] args) throws Exception
    {
        ArrayList<TheMuon> ds=new ArrayList<TheMuon>();
        Scanner sc=new Scanner(System.in);
        int dem=0;
        char c;
        do
        {
            System.out.println("Nhap thong tin the muon thu "+(dem+1)+" :");
            TheMuon tg=new TheMuon();
            tg.nhapThongTin();
            ds.add(tg);
            dem++;
            System.out.print("Co muon nhap nua khong (Y/N): ");
            c=sc.nextLine().charAt(0);
        }while(c=='y'||c=='Y');
        System.out.println("=============================================");
        for(int i=0;i<ds.size();i++)
            if(ds.get(i).getNgayTra()==30)
                ds.get(i).hienThongTin();
    }
    
}

Bài tập lập trình hướng đối tượng với Java (Số 4)

//Họ Tên: Trần Văn Linh
//MaSV:581597
//Lớp:K58QLTT

Đề:
Khoa CNTT-DHTN cần quản lý việc thanh toán tiền lương cho các cán bộ giáo viên trong khoa. Để quản
lý được, thì nhà quản lý cần có những thông tin như sau:
- Với mỗi cán bộ giáo viên, có các thông tin như sau: lương cứng, thướng, phạt, lương thực lĩnh và các
thông tin cá nhân của mỗi cán bộ giáo viên
- Các thông tin cá nhân của mỗi cán bộ giáo viên: Họ và tên, ngày sinh, quê quán.
1. Hãy xây dựng lớp Nguoi để quản lý các thông tin cá nhân về mỗi cán bộ giáo viên
2. Xây dựng lớp CBGV ( cán bộ giáo viên) để quản lý các thông tin về mỗi cán bộ giáo viên
3. Xây dựng các phương thức : nhập, hiển thị các thông tin cá nhân của mỗi cán bộ giáo viên
4. Tính lương thực lĩnh cho mỗi cán bộ nếu công thức tính lương được tính như sau:
Lương thực lĩnh=Lương cứng + thưởng - phạt
5. In ra danh sách những cán bộ có lương thực lĩnh >= 8 triệu
    Giải

//Lớp Nguoi
import java.util.Scanner;
import java.util.Date;
import java.text.SimpleDateFormat;
public class Nguoi
{
    private String hoTen;
    private Date ngaySinh;
    private String queQuan;
 
    public Nguoi()
    {
        this.ngaySinh=new Date();
    }
    public Nguoi(String hoTen,Date ngaySinh,String queQuan)
    {
        this.hoTen=hoTen;
        this.ngaySinh=ngaySinh;
        this.queQuan=queQuan;
    }
 
    public void nhapThongTin(Scanner sc)
    {
        System.out.print("Nhap ho ten: ");
        this.hoTen=sc.nextLine();
        System.out.println("Nhap ngay sinh(dd-MM-yyyy): ");
        String ns=sc.nextLine();
        this.ngaySinh=chuyenStringDate(ns);
        System.out.print("Nhap que quan: ");
        this.queQuan=sc.nextLine();
    }
    public Date chuyenStringDate(String str)
    {
        Date ns=null;
        SimpleDateFormat sdf=new SimpleDateFormat("dd-MM-yyyy");
        try
        {
            ns=sdf.parse(str);
        }
        catch(Exception e)
        {
            System.out.println("Loi dinh dang ngay thang.!");
        }
        return ns;
    }
    public void hienThongTin()
    {
         System.out.println("Ho va ten: "+this.hoTen);
         System.out.println("Ngay Sinh: "+this.ngaySinh);
         System.out.println("Que quan: "+this.queQuan);
    }

}
//Lop CBGV
import java.util.Scanner;
import java.util.Date;
public class CBGV extends Nguoi
{
    private double luongCung;
    private double thuong;
    private double lThuclinh;
    private double phat;
    
    public CBGV()
    {
        
    }
    public  CBGV(String hoTen,Date ngaySinh,String queQuan,double luongCung,double thuong,double phat)
    {
        super( hoTen,ngaySinh, queQuan);
        this.luongCung=luongCung;
        this.thuong=thuong;
        this.phat=phat;
        this.lThuclinh=this.luongCung+this.thuong-this.phat;
    }
    
    public void nhapThongTin(Scanner sc)
    {
        super.nhapThongTin(sc);
        System.out.print("Nhap luong cung: ");
        this.luongCung=sc.nextDouble();
        System.out.print("Nhap thuong: ");
        this.thuong=sc.nextDouble();
        System.out.print("Nhap phat: ");
        this.phat=sc.nextDouble();sc.nextLine();
        this.lThuclinh=this.luongCung+this.thuong-this.phat;
    }
    public void hienThongTin()
    {
        super.hienThongTin();
        System.out.println("Luong cung: "+this.luongCung);
        System.out.println("Thuong: "+this.thuong);
        System.out.println("Phat: "+this.phat);
        System.out.println("Luong thuc linh: "+this.lThuclinh);
    }
    
    public double getLuongThucLinh()
    {
       return this.lThuclinh;
    }
    public static void main(String[] args)
    {
        CBGV dsCB[];
        Scanner sc=new Scanner(System.in);
        System.out.print("Nhap so luong can bo :");
        int n=sc.nextInt();sc.nextLine();
        dsCB=new CBGV[n];
        for(int i=0;i<n;i++)
        {
            System.out.println("Nhap can bo thu "+(i+1)+": ");
            dsCB[i]=new CBGV();
            dsCB[i].nhapThongTin(sc);
        }
        
        System.out.println("Can bo co luong thuc linh >=8trieu:");
        for(int i=0;i<n;i++)
        {
            if(dsCB[i].getLuongThucLinh()>=8000000)
                dsCB[i].hienThongTin();
        }
    }
}


Bài tập lập trình hướng đối tượng với Java (số 3)

//Họ Tên: Trần Văn Linh
//MaSV:581597
//Lớp:K58QLTT

Đề:
Để quản lý hồ sơ học sinh của trường THPT, người ta cần quản lý những thông tin như sau:
- Các thông tin về : lớp, khoá học, kỳ học, và các thông tin cá nhân của mỗi học sinh.
- Với mỗi học sinh, các thông tin cá nhân cần quản lý gồm có: Họ và tên, ngày sinh, quê quán.
1. Hãy xây dựng lớp Nguoi để quản lý các thông tin cá nhân của mỗi học sinh.
2. Xây dựng lớp HSHocSinh (hồ sơ học sinh) để lý các thông tin về mỗi học sinh.
3. Xây dựng các phương thức : nhập, hiển thị các thông tin về mỗi cá nhân.
4. Cài đặt chương trình thực hiện các công việc sau:
- Nhập vào một danh sách gồm n học sinh ( n- nhập từ bàn phím)
- Hiển thị ra màn hình tất cả những học sinh sinh năm 1985 và quê ở Thái Nguyên
- Hiển thị ra màn hình tất cả những học sinh của lớp 10A1

Giải
//Lop Nguoi
import java.util.Scanner;
import java.util.Date;
import java.text.SimpleDateFormat;
public class Nguoi
{
    private String hoTen;
    private Date ngaySinh;
    private String queQuan;
 
    public Nguoi()
    {
        this.ngaySinh=new Date();
    }
    public Nguoi(String hoTen,Date ngaySinh,String queQuan)
    {
        this.hoTen=hoTen;
        this.ngaySinh=ngaySinh;
        this.queQuan=queQuan;
    }
 
    public void nhapThongTin()
    {
        Scanner sc=new Scanner(System.in);
        System.out.print("Nhap ho ten: ");
        this.hoTen=sc.nextLine();
        System.out.print("Nhap ngay sinh (dd-mm-yyyy): ");
        String ns=sc.nextLine();
        this.ngaySinh=chuyenStringDate(ns);
        System.out.print("Nhap que quan: ");
        this.queQuan=sc.nextLine();
    }
    public void hienThongTin()
    {
         System.out.println("Ho va ten: "+this.hoTen);
         System.out.println("Ngay Sinh: "+this.ngaySinh);
         System.out.println("Que quan: "+this.queQuan);
    }
    public Date chuyenStringDate(String str)
    {
        Date ns=null;
        SimpleDateFormat sdf=new SimpleDateFormat("dd-MM-yyyy");
        try
        {
            ns=sdf.parse(str);
        }catch(Exception e)
        {
            System.out.println("Loi dinh dang ngay thang.!");
        }
        return ns;
    }
    public String getQueQuan()
    {
        return this.queQuan;
    }
    public Date getNgaySinh()
    {
        return this.ngaySinh;
    }

}
//lớp HSHocSinh
import java.util.Scanner;
import java.util.Date;
public class HSHocSinh extends Nguoi 
{
    private String lop;
    private String khoaHoc;
    
    public HSHocSinh ()
    {
        
    }
    public HSHocSinh(String hoTen,Date ngaySinh,String queQuan,String lop,String khoaHoc)
    {
        super( hoTen, ngaySinh, queQuan);
        this.lop=lop;
        this.khoaHoc=khoaHoc;
    }
    
    public void nhapThongTin()
    {
        super.nhapThongTin();
        Scanner sc=new Scanner(System.in);
        System.out.print("Nhap ten lop: ");
        this.lop=sc.nextLine();
        System.out.print("Nhap khoa hoc: ");
        this.khoaHoc=sc.nextLine();
    }
    public void hienThongTin()
    {
        super.hienThongTin();
        System.out.println("Lop: "+this.lop);
        System.out.println("Khoa hoc: "+this.khoaHoc);
    }
    
    public String getLop()
    {
        return this.lop;
    }
}
//Lớp Test

import java.util.ArrayList;
import java.util.Scanner;
public class Test
{
   public static void main(String[] args) throws Exception
   {
       ArrayList<HSHocSinh> ds;
       int n;
       Scanner sc=new Scanner(System.in);
       try
       {     
           System.out.print("Nhap so luong hoc sinh: ");
           n=sc.nextInt();
           sc.nextLine();
        }catch(Exception e)
        {
            n=1;
        }
       String tl=null;
       ds=new ArrayList<HSHocSinh>(n);
       HSHocSinh b=new HSHocSinh();
       while(true)
       {
           b.nhapThongTin();
           ds.add(b);
           System.out.print("Ban co muon nhap nua khong (c/k): ");
           tl=sc.nextLine();
           if(tl.equalsIgnoreCase("k"))
                break;
       }
       for(int i=0;i<n;i++)
       {
           System.out.println("--------------------");
           ds.get(i).hienThongTin();
           System.out.println("--------------------");
       }
       
       System.out.println("Nhung sinh vien que o thai nguyen va sinh nam 1985 la: ");
       for(int i=0;i<n;i++)
           if((ds.get(i).getNgaySinh().getYear()-1900==1985) && (ds.get(i).getQueQuan().equalsIgnoreCase("Thai Nguyen")))
                ds.get(i).hienThongTin();
        
       System.out.println("Nhung sinh vien hoc lop 10A1 la: ");
       for(int i=0;i<ds.size();i++)
            if(ds.get(i).getLop().equalsIgnoreCase("10A1"))
                ds.get(i).hienThongTin();
    }
}

Bài tập lập trình hướng đối tượng với java (Số 2)

Đề:
Để quản lý khách hàng đến thuê phòng trọ của một khách sạn, người ta cần quản lý những thông tin sau:
- Số ngày trọ, loại phòng trọ, giá phòng, và các thông tin cá nhân về mỗi khách trọ.
- Với mỗi cá nhân, người ta cần quản lý các thông tin : Họ và tên, ngày sinh, số chứng minh thư nhân dân.
1. Hãy xây dựng lớp Nguoi để quản lý thông tin cá nhân về mỗi cá nhân
2. Xây dựng lớp KhachSan để quản lý các thông tin về khách trọ.
3. Viết các phương thức : nhập, hiển thị, xóa các thông tin về một khách trọ,
4. Cài đặt chương trình thực hiện các công việc sau:
- Nhập vào một dãy gồm n khách trọ ( n - nhập từ bàn phím)
- Hiển thị ra màn hình thông tin về các cá nhân hiện đang trọ ở khách sạn đó.
- Tính số tiền cần phải trả nếu một khách hàng trả phòng trọ (căn cứ vào số CMND để tìm kiếm trong mảng)

//Lop Nguoi
import java.util.Scanner;
import java.util.Date;
import java.text.SimpleDateFormat;
public class Nguoi
{
   private String hoTen;
   private Date ngaySinh;
   private String soCMND;
   public Nguoi()
   {
     
   }
   public Nguoi( String hoTen,Date ngaySinh,String soCMND)
   {
       this.hoTen=hoTen;
       this.ngaySinh=ngaySinh;
       this.soCMND=soCMND;
   }
   public void nhapThongTin(Scanner sc)
   {
       System.out.print("Nhap ho va ten khach hang: ");
       this.hoTen=sc.nextLine();
       System.out.println("Nhap ngay sinh(dd-mm-yyyy): ");
       String ns=sc.nextLine();
       this.ngaySinh=chuyenStringDate(ns);
       System.out.print("Nhap so chung minh nhan dan: ");
       this.soCMND=sc.nextLine();
   }
   public void hienThongTin()
   {
       System.out.println("Ho va Ten: "+this.hoTen);
       System.out.println("Ngay sinh: "+this.ngaySinh);
       System.out.println("So chung minh nhan dan: "+this.soCMND);
   }
   public Date chuyenStringDate(String str)
   {
       Date ns=null;
       SimpleDateFormat sdf=new SimpleDateFormat("dd-MM-yyyy");
       try
       {
           ns=sdf.parse(str);
       }
       catch(Exception e)
       {
          System.out.println("Loi dinh dang thoi gian.!");
       }
       return ns;
   }
   public String getSoCMND()
    {
        return this.soCMND;
    }
}

//lop Khach San
import java.util.Scanner;
import java.util.Date;
public class KhachSan 
{
    private int soNgaytro;
    private String loaiP;
    private double giaP;
    Nguoi nguoi;
    
    public KhachSan()
    {
        
    }
    public KhachSan(int soNgaytro, String loaiP,double giaP, Nguoi nguoi)
    {
        this.soNgaytro=soNgaytro;
        this.loaiP=loaiP;
        this.giaP=giaP;
        this.nguoi=nguoi;
    }
    
    public void nhapThongTin(Scanner sc)
    {
        nguoi=new Nguoi();
        this.nguoi.nhapThongTin(sc);
        System.out.print("Nhap so ngay tro: ");
        this.soNgaytro=sc.nextInt();
        sc.nextLine();
        System.out.print("Nhap loai phong tro: ");
        this.loaiP=sc.nextLine();
        System.out.print("Nhap gia phong: ");
        this.giaP=sc.nextDouble();sc.nextLine();
    }
    public void hienThongTin()
    {
        nguoi.hienThongTin();
        System.out.println("So ngay tro: "+this.soNgaytro);
        System.out.println("Loai phong: "+this.loaiP);
        System.out.println("Gia phong: "+this.giaP);
    }
    public double thanhTien()
    {
        return this.soNgaytro*this.giaP;
    }
    
    public Nguoi getKhach()
    {
        return this.nguoi;
    }
    public void xoa()
    {
        this.nguoi=new Nguoi();// xoa thong tin ve nguoi
        this.soNgaytro=0;
        this.loaiP=null;
        this.giaP=0;
    }
}
//Lớp test
import java.util.Scanner;
import java.util.ArrayList;
public class Test
{
    public static void main(String[] args)
    {
             Scanner sc=new Scanner(System.in);
          ArrayList<KhachSan> ds;
          int n;
          
          System.out.print("Nhap so luong khach tro: ");
          n=sc.nextInt();sc.nextLine();
          
          ds=new ArrayList<KhachSan>(n);
          KhachSan b;
          for(int i=0;i<n;i++)
          {
              b=new KhachSan();
              b.nhapThongTin(sc);
              ds.add(b);
          }
          System.out.println("Danh sach khach tro: ");
          for(int i=0;i<ds.size();i++)
             ds.get(i).hienThongTin();
          String tim;
          System.out.print("Nhap so chung minh nhan dan cua khach hang can thanh toan: ");
          tim=sc.nextLine();
          for(int i=0;i<ds.size();i++)
            if(ds.get(i).getKhach().getSoCMND().equalsIgnoreCase(tim))
                 System.out.println("Tien phai thanh toan: "+ds.get(i).thanhTien());
 }
}


Bài lập trình hướng đối tượng về Java (Số 1)

//Họ Tên: Trần Văn Linh
//MaSV:581597
//Lớp:K58QLTT

Đề :

   Để quản lý các hộ dân trong một khu phố, người ta quản lý các thông tin như sau:
- Với mỗi hộ dân, có các thuộc tính:
+ Số thành viên trong hộ ( số người)
+ Số nhà của hộ dân đó. ( Số nhà được gắn cho mỗi hộ dân)
+ Thông tin về mỗi cá nhân trong hộ gia đình.
- Với mỗi cá nhân, người ta quản lý các thông tin như: họ và tên, ngày  sinh, nghề nghiệp.
1. Hãy xây dựng lớp Nguoi để quản lý thông tin về mỗi cá nhân.
2. Xây dựng lớp KhuPho để quản lý thông tin về các hộ gia đình.
3. Viết các phương thức nhập, hiển thị thông tin cho mỗi cá nhân.
4. Cài đặt chương trình thực hiện các công việc sau:
- Nhập vào một dãy gồm n hộ dân (n - nhập từ bàn phím).
- Hiển thị ra màn hình thông tin về các hộ trong khu phố năm nay có người mừng thượng thọ (80 tuổi)

--------------------------------------------------------------------------------------------------------------------------

      Giải:

//Lớp Người
import java.util.Scanner;
import java.util.Date;
import java.text.SimpleDateFormat;
public class Nguoi
{
    private String hoTen;
    private Date ngaySinh;
    private String ngNghiep;
    
    public Nguoi()
    {
    }
    public Nguoi(String hoTen,Date ngaySinh,String ngNghiep)
    {
        this.hoTen=hoTen;
        this.ngaySinh=ngaySinh;
        this.ngNghiep=ngNghiep;
    }
    
    public void nhapThongTin(Scanner sc)
    {
        System.out.print("Nhap ho ten: ");
        this.hoTen=sc.nextLine();
        System.out.print("Nhap ngay sinh theo dinh dang dd-MM-yyyy: ");
        String ns=sc.nextLine();
        this.ngaySinh=chuyenStringDate(ns);
        System.out.print("Nhap nghe nghiep: ");
        this.ngNghiep=sc.nextLine();
    }
    public Date chuyenStringDate(String ngay)
    {
        SimpleDateFormat sdf=new SimpleDateFormat("dd-MM-yyyy");
        Date ns=null;
        try
        {
            ns=sdf.parse(ngay);
        }catch(Exception e)
        {
            System.out.println("Loi dinh dang thoi gian.!");
        }
        return ns;
    }
    public void hienThongTin()
    {
        System.out.println("Ho va ten: "+this.hoTen);
        System.out.println("Ngay sinh: "+this.ngaySinh);
        System.out.println("Nghe nghiep: "+this.ngNghiep);
    }
    public Date getNgaySinh()
    {
        return this.ngaySinh;
    }
   
}
//Lớp Hộ Dân
import java.util.Scanner;
import java.util.Date;
public class HoDan
{
   private int soTVien;
   private int soNha;
   private Nguoi[] thanhVien;
   
   public HoDan()
   {
       this.thanhVien=new Nguoi[10];
   }
   public HoDan(int soTVien,int soNha,Nguoi[] thanhVien)
   {
       this.soTVien=soTVien;
       this.soNha=soNha;
       this.thanhVien=thanhVien;
   }
   
   public void nhapThongTin(Scanner sc)
   {
       System.out.print("Nhap so thanh vien: ");
       this.soTVien=sc.nextInt();
       System.out.print("Nhap so nha: ");
       this.soNha=sc.nextInt();sc.nextLine();
       for(int i=0;i<n;i++)
       {
           System.out.println("Nhap thong tin thanh vien thu "+(i+1)+": ");
           thanhVien[i]=new Nguoi();
           thanhVien[i].nhapThongTin(sc);
       }
   }
   public void hienThongTin()
   {
       System.out.println("So nha: "+this.soNha);
       System.out.println("So thanh vien: "+this.soTVien);
       for(int i=0;i
       {
           System.out.println("Thanh vien thu "+(i+1)+": ");
           thanhVien[i].hienThongTin();
       }
   }
   public Nguoi[] getThanhVien()
   {
       return this.thanhVien;
   }

//Lớp khu phố
import java.util.Scanner;
import java.util.ArrayList;
public class KhuPho
{
    private HoDan[] dsHoDan;
    private int n;
    
    public void nhapHoDan(Scanner sc)
    {
        System.out.print("Nhap so ho dan can nhap: ");
        this.n=sc.nextInt();sc.nextLine();
        this.dsHoDan=new HoDan[n];
        for(int i=0;i<n;i++)
        {
            System.out.println("Nhap thong tin dan thu "+(i+1)+": ");
            this.dsHoDan[i]=new HoDan();
            this.dsHoDan[i].nhapThongTin(sc);
        }
    }

    public static void main(String[] args)
    {
        KhuPho ql=new KhuPho();
        Scanner sc=new Scanner(System.in);
        ql.nhapHoDan(sc);
        System.out.println("Nhap nam mung tho: ");
        int nam=sc.nextInt();
        ql.mungTho(nam);
    }
    public void mungTho(int nam)
    {
        Nguoi thanhVien[]=null;
        boolean a=false;
        int soTvien;
        int b;
        for(int i=0; i<n;i++)
        {
            b=0;
            thanhVien=dsHoDan[i].getThanhVien();
            soTvien=thanhVien.length;
                while(soTvien!=0)
                {
                    if((nam-thanhVien[b].getNgaySinh().getYear()-1900)>=80)
                    {
                         a=true;
                         break;
                    }
                    soTvien--;
                    b++;
                }
             if(a==true)
                dsHoDan[i].hienThongTin();
         }
   }

}

Tuesday, April 26, 2016

10 Lý do để học ngôn ngữ lập trình Java và tại sao Java là tốt nhất

10 Lý do để học ngôn ngữ lập trình Java và tại sao Java là tốt nhất





Học lập trình ngôn ngữ Java tốt nhất
Theo chỉ số TIOBE thì Java là ngôn ngữ được sử dụng nhiều nhất hiện nay.
Java là một ngôn ngữ lập trình phổ biến. Điều này được chứng minh thực tế trong suốt 20 năm qua.
Hai thập kỷ không phải là một thời gian ngắn cho bất kỳ một ngôn ngữ lập trình nào, và Java đã khẳng định được sức mạnh từng ngày. Dù có những lúc, Java phát triển chậm lại, nhưng nó đã thích ứng tốt. Trước đó, với thay đổi cơ bản về hình thức Enum, Generics, và autoboxing trong Java 5, cải thiện hiệu suất với Java 6, và việc Google lựa chọn ngôn ngữ Java để phát triển ứng dụng Android, Java vẫn giữ vị trí là ngôn ngữ lập trình tiên phong.
Nhiều sinh viên thường hỏi tôi rằng “Ngôn ngữ lập trình nào là tốt nhất mà chúng ta nên tìm hiểu, tôi có nên học Java...?”. Vâng, điều đó phụ thuộc vào định nghĩa ngôn ngữ lập trình tốt nhất của bạn, nếu xét về độ phổ biến thì rõ ràng Java vượt trội so với bất cứ ngôn ngữ nào khác, thậm chí cả C, dù C đã tồn tại trong gần 41 năm (1972). Nếu xét về cơ hội việc làm, một lần nữa Java lại ghi điểm với mọi ngôn ngữ khác. Bạn có thể tìm thấy vô số cơ hội việc làm bằng việc học ngôn ngữ lập trình Java, bạn có thể phát triển Java cơ bản cho các ứng dụng phía máy chủ, các ứng dụng Web và các ứng dụng doanh nghiệp, và thậm chí có thể áp dụng cho việc phát triển ứng dụng di động dựa trên nền tảng Android. Vì vậy, nếu bạn chưa học ngôn ngữ lập trình C và C++, và muốn tìm hiểu ngôn ngữ lập trình đầu tiên, tôi khuyên bạn nên chọn Java. Trong bài viết này, tôi sẽ chia sẻ những lý do tại sao bạn nên học lập trình Java.
Đây là 10 lý do mà tôi luôn nói với bất cứ ai hỏi ý kiến tôi về việc học Java, và liệu Java là ngôn ngữ lập trình tốt nhất ở các khía cạnh cơ hội việc làm, phát triển các ứng dụng và hỗ trợ cộng đồng.

1. Java rất dễ tìm hiểu

Nhiều người sẽ ngạc nhiên khi thấy điều này là một trong những lý do hàng đầu để học Java, hoặc coi nó như là ngôn ngữ lập trình tốt nhất, nhưng đó là sự thật. Nếu bạn học cấp tốc, sẽ rất khó để hoàn thành trong khoảng thời gian ngắn, đó là ví dụ xảy ra với hầu hết các dự án chuyên nghiệp. Java có cú pháp rõ ràng với chú thích nhỏ đi kèm, ví dụ Generics với dấu ngoặc nhọn chứa kiểu dữ liệu làm cho việc đọc và học chương trình Java trở nên dễ dàng và nhanh chóng. Một khi lập trình viên đã quen thuộc với những rào cản ban đầu như cài đặt JDK và thiết lập PATH và hiểu phương thức hoạt động của Classpath thì họ có thể viết chương trình trong Java rất dễ dàng.

2. Java là một ngôn ngữ lập trình hướng đối tượng

Một lý do khác khiến Java phổ biến bởi vì nó là một ngôn ngữ lập trình hướng đối tượng. Phát triển OOPS (Object-Oriented Programming System – hệ thống lập trình hướng đối tượng) dễ dàng hơn nhiều, và nó cũng duy trì mô-đun hệ thống, linh hoạt và mở rộng. Một khi bạn có kiến thức về định nghĩa OOPS như sự trừu tượng, đóng gói, đa nhiệm và thừa kế, bạn có thể sử dụng chúng trong Java. Bản thân Java là hiện thân của nhiều phương pháp tư duy tốt nhất và các mẫu thiết kế trong các thư viện của nó. Java là một trong số ít ngôn ngữ lập trình đạt tới gần 100% OOPS. Java cũng thúc đẩy việc sử dụng các nguyên tắc SOLID (Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion – một dạng thiết kế hướng đối tượng) và thiết kế hướng đối tượng theo hình thức dự án mã nguồn mở như Spring, mà chắc chắn rằng đối tượng phụ thuộc của bạn được quản lý tốt bằng việc sử dụng nguyên lý Injection (một lý thuyết trong thiết kế phần mềm).

3. Số lượng hàm dùng sẵn (API function) của Java hết sức phong phú

Một lý do khác mang lại thành công lớn cho ngôn ngữ lập trình Java là nó nhiều API. Quan trọng nhất là nó rất dễ nhìn, bởi vì nó xuất hiện cùng với việc cài đặt Java. Khi tôi bắt đầu lập trình Java, tôi viết mã cho các Applet và thời đó Applet là một giải pháp cho các hiệu ứng hoạt hình tuyệt vời, điều đó mang lại sự ngạc nhiên cho những lập trình viên mới như chúng tôi, những người đang sử dụng mã nguồn trong Turbo C++. Java cung cấp API cho I/O (giao tiếp dữ liệu), mạng, tiện ích, XML, phân tích cú pháp, kết nối cơ sở dữ liệu, và gần như tất cả mọi thứ. Những điều còn lại được chứa trong các thư viện mã nguồn mở như Apache, Google Guava và một số chương trình khác.

4. Các công cụ phát triển mạnh mẽ như Eclipse, Netbeans

Có thể bạn không tin, nhưng Eclipse và Netbeans đã đóng vai trò rất lớn trong việc làm cho Java trở thành một trong những ngôn ngữ lập trình tốt nhất. Viết mã trong IDE là niềm vui, đặc biệt nếu bạn đã từng viết mã trong hệ điều hành DOS Editor hoặc Notepad. Chúng không chỉ giúp hoàn thành mã mà còn cung cấp khả năng sửa lỗi mạnh mẽ, điều đó là cần thiết trong môi trường lập trình thực tế. Môi trường phát triển tích hợp (IDE) giúp cho việc phát triển Java dễ dàng hơn, nhanh và thuận tiện hơn. Tìm kiếm, tổ chức lại mã và đọc mã bằng IDE. Ngoài IDE, nền tảng Java cũng có một số công cụ khác như Maven và ANT để dịch và đóng gói ứng dụng Java, dịch ngược mã, JConsole, Visual VM để giám sát bộ nhớ Heap…

5. Bộ sưu tập thư viện mã nguồn mở phong phú

Thư viện mã nguồn mở đảm bảo rằng Java có thể được sử dụng ở khắp mọi nơi. Apache, Google, và các tổ chức khác đã đóng góp rất nhiều thư viện lớn, giúp Java phát triển dễ dàng hơn, nhanh hơn và tiết kiệm chi phí. Có những cấu trúc như Spring, Struts, Maven đảm bảo sự phát triển Java theo phương pháp xây dựng phần mềm tốt nhất, thúc đẩy sử dụng các mẫu thiết kế và hỗ trợ lập trình viên Java hoàn thành công việc. Tôi luôn luôn khuyên bạn nên tìm kiếm một chức năng cần viết bằng Google trước khi viết mã riêng của bạn. Đó là cơ hội tốt bởi vì nó phần nhiều đã được viết, kiểm tra và có sẵn để sử dụng.

6. Hỗ trợ cộng đồng tuyệt vời

Cộng đồng là sức mạnh lớn nhất của ngôn ngữ lập trình Java và nền tảng này. Một ngôn ngữ dù tốt thế nào đi nữa cũng sẽ không thể tồn tại nếu không có cộng đồng hỗ trợ, giúp đỡ và chia sẻ kiến thức. Java đã rất may mắn, nó có rất nhiều diễn đàn hoạt động, StackOverflow, tổ chức mã nguồn mở và một số nhóm người sử dụng Java giúp đỡ lẫn nhau. Cộng đồng các lập trình viên Java có thâm niên và thậm chí cả các chuyên gia sẽ giúp đỡ người mới bắt đầu. Java thực sự thúc đẩy việc thu nhận kiến thức và đóng góp hỗ trợ lại cộng đồng. Rất nhiều lập trình viên, những người sử dụng mã nguồn mở, tham gia vào xây dựng, nâng cấp mã mở, kiểm thử,… Các chuyên gia tư vấn miễn phí tại nhiều diễn đàn Java và StackOverflow. Điều tuyệt vời này đã mang lại tự tin cho những lập trình viên Java.

7. Java là miễn phí

Ai cũng thích những thứ miễn phí phải không nào, còn bạn? Vì vậy, nếu một lập trình viên muốn học một ngôn ngữ lập trình, hoặc một tổ chức muốn sử dụng một công nghệ, chi phí là một yếu tố quan trọng. Vì Java là miễn phí ngay từ đầu, tức là bạn không cần phải trả bất cứ khoản chi phí nào để tạo ra các ứng dụng Java. Chính điều này cũng giúp Java trở thành kỹ năng thông dụng trong cộng đồng lập trình viên, và các tổ chức lớn. Sự dồi dào lập trình viên Java là một lợi thế lớn, làm cho các tổ chức dễ dàng lựa chọn Java cho chiến lược phát triển.

8. Hỗ trợ tài liệu xuất sắc – Javadocs

Lần đầu tiên thấy Javadoc, tôi đã rất ngạc nhiên. Đó là tài liệu chứa nhiều thông tin về Java API. Tôi nghĩ rằng nếu không có tài liệu Javadoc thì Java sẽ không được phổ biến, và đó là một trong những lý do chính để tôi nghĩ rằng Java là ngôn ngữ lập trình tốt nhất. Không phải ai cũng có thời gian và ý định xem xét mã để tìm hiểu phương pháp làm hoặc làm thế nào để sử dụng một lớp. Javadoc làm cho việc học dễ dàng và cung cấp một tài liệu tham khảo tuyệt vời trong khi viết mã Java. Với sự xuất hiện của IDE, bạn thậm chí không cần phải nhìn Javadoc một cách rõ ràng trong trình duyệt mà bạn đã có thể nhận được tất cả thông tin trong cửa sổ IDE của bạn.

9. Java là nền tảng độc lập

Trong năm 1990, đây là lý do chính khiến Java phổ biến. Ý tưởng về nền tảng độc lập là rất tuyệt, và slogan của Java “viết một lần chạy mọi nơi” đã đủ sức lôi kéo để thu hút rất nhiều sự phát triển mới trong Java. Điều này vẫn còn là một trong những lý do để Java là ngôn ngữ lập trình tốt nhất, hầu hết các ứng dụng Java được phát triển trong môi trường Windows và chạy trên nền tảng UNIX.

10. Java có mặt ở khắp mọi nơi

Vâng, Java có ở khắp mọi nơi, trên máy tính để bàn, trên điện thoại di động, trên thẻ, gần như ở khắp mọi nơi và lập trình viên Java cũng vậy. Tôi nghĩ rằng số lượng lập trình viên Java vượt xa lập trình viên bất kỳ ngôn ngữ lập trình chuyên nghiệp khác. Dù không có bất kỳ dữ liệu để làm sáng tỏ nhận định ấy, kinh nghiệm đã chỉ cho tôi điều đó. Số lượng lớn lập trình viên Java hiện nay cũng là một lý do mà các tổ chức muốn chọn Java cho những phát triển mới hơn bất kỳ ngôn ngữ lập trình khác.
Có thể nói rằng, lập trình là lĩnh vực rất rộng và nếu bạn nhìn vào C và UNIX, chúng vẫn còn sống và ngày càng mạnh mẽ hơn, đủ để sống thêm 20 năm nữa, Java cũng không hề thua kém. Có nhiều cuộc thảo luận về lập trình chức năng (functional programming), Scala và ngôn ngữ JVM khác, nhưng chúng cần phải đi một chặng đường dài để tương thích với cộng đồng, các nguồn lực và phổ biến của Java. Rất tiếc lập trình hướng đối tượng cũng là một trong những mô hình lập trình tốt nhất, và miễn là nó tồn tại thì Java sẽ vẫn còn vững chắc.

Nguồn :https://techmaster.vn/posts/3967/hoc-ngôn-ngữ-lập-trình-java-tốt-nhất