Category Archives: Bài tập Java

Thực hành Java: Bài 2-OOP. Xây dựng lớp Hình Tam Giác

Hướng dẫn

Để tiện cho việc theo dõi, tôi đặt method main vào trong lớp HinhTamGiac, các bạn có thể viết lớp HinhTamGiac không chứa method main sau đó tạo lớp khác sử dụng lớp HinhTamGiac
Code:

import java.util.Scanner;
import javax.swing.JOptionPane;
public class HinhTamGiac {
    private int ma;
    private int mb;
    private int mc;
    //Constructor
    public HinhTamGiac(){
        ma=mb=mc=0;
    }
    public HinhTamGiac(int a,int b,int c){
        if(a<0){
            JOptionPane.showMessageDialog(null,"canh phai >0",
                    "Thong bao",JOptionPane.WARNING_MESSAGE);
            ma=0;
            return;
        }
        if(b<0){
            JOptionPane.showMessageDialog(null,"canh phai >0",
                    "Thong bao",JOptionPane.WARNING_MESSAGE);
            mb=0;
            return;
        }
        if(c<0){
            JOptionPane.showMessageDialog(null,"canh phai >0",
                    "Thong bao",JOptionPane.ERROR_MESSAGE);
            mc=0;
            return;
        }
        if(a+b<=c||a+c<=b||b+c<=a) {
            JOptionPane.showMessageDialog(null,"Khong phai tam giac",
                    "Thong bao",JOptionPane.ERROR_MESSAGE);
            ma=mb=mc=0;
            return;
        }
        ma=a;
        mb=b;
        mc=c;
    }
    //Get methods
    public int getCanhA(){
        return ma;
    }
    public int getCanhB(){
        return mb;
    }
    public int getCanhC(){
        return mc;
    }
    //set methods
    public void setCanhA(int a){
        ma=a;
    }
    public void setCanhB(int b){
        mb=b;
    }
    public void setCanhC(int c){
        mc=c;
    }
    public boolean laTamGiac(){
        return(ma+mb>mc&&ma+mc>mb&&mb+mc>ma);
    }
    public boolean laTamGiac(int a,int b,int c){
        return(a+b>c&&a+c>b&&b+c>a);
    }
    public int getChuvi(){
        return ma+mb+mc;
    }
    public double getDienTich(){
            double p=(double)(ma+mb+mc)/2;
            return Math.sqrt(p*(p-ma)*(p-mb)*(p-mc));                   
    }
    public static void main(String[] args) {
        System.out.println("nhap ba canh hinh tam giac");
        Scanner input=new Scanner(System.in);
        int ma=input.nextInt();
        int mb=input.nextInt();
        int mc=input.nextInt();
        HinhTamGiac tamgiac=new HinhTamGiac(ma,mb,mc);
        if(tamgiac.laTamGiac()){
            System.out.println("Chu vi: "+tamgiac.getChuvi());
            System.out.println("Dien tich: "+tamgiac.getDienTich());
        }         
    }   
}

Thực hành Java: Bài 24. Tạo xâu có các từ theo thứ tự ngược

Hướng dẫn

Code đơn giản như sau:

import java.util.Scanner;
public class Bai24 {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String str=input.nextLine();
        String[] spStr=str.split(" ");
        StringBuilder ketqua=new StringBuilder();
        for(int i=0;i<spStr.length;i++){
            ketqua=ketqua.append(spStr[spStr.length-i-1]).append(" ");
        }
        System.out.println(ketqua);
    }
    
}

Thực hành Java: Bài 23. Tách mã vùng số điện thoại

Hướng dẫn

Trước tiên cần kiểm tra xem xâu số điện thoại người dùng nhập vào đúng định dạng chưa bằng cách sử dụng biểu thức chính quy.
Sau đó dùng method .split để tách các cụm số dựa vào ký tự ngăn cách bao gồm ký tự dấu cách và dấ “-”

import javax.swing.JOptionPane;
 class Bai23 {
    public static void main(String[] args) {
        String str=JOptionPane.showInputDialog("Nhap vao chuoi so dt").trim();
        while(!str.matches("\\([\\d]{3}\\) [\\d]{3}-[\\d]{7}")) {
            str=JOptionPane.showInputDialog("Khong phai so dt, xin nhap lai");            
        }
        String[] mang1=str.split(" ");
        mang1[0] = mang1[0].replace("(", "");
        mang1[0] = mang1[0].replace(")", "");
        String maQuocGia=mang1[0];
        String[] mang2=mang1[1].split("-",2);
        String maVung=mang2[0];
        String soDT = mang2[1];
        System.out.print("Ma qgia: "+maQuocGia+"\nMa vung: "+maVung
                            +" \nSo dien thoai: "+soDT);
    }
    
}

Thực hành Java: Bài 22. Xóa nguyên âm trong xâu

Hướng dẫn

import java.util.Scanner;
public class Bai22 {
    public static void main(String[] args) {
        String[] vowel={"a","e","i","o","u","y"};
        Scanner input=new Scanner(System.in);
        String str=input.nextLine();
        for(String ch:vowel){
            if(str.contains(ch))
                str=str.replaceAll(ch, "");
        }
        System.out.println(str);
    }
}

Thực hành Java: Bài 21. Loại bỏ khoảng trắng thừa trong xâu

Hướng dẫn

Cách đơn giản nhất giải quyết bài này là sử dụng lớp  StringBuilder để append lần lượt các ký tự có ý nghĩa của xâu. Các bạn có thể dùng cách khác như chuyển xâu sang mảng ký tự và tiến hành loại bỏ khoảng trắng thừa sau đó chuyển mảng ký tự trở lại xâu


import java.util.Scanner;
public class Bai21 {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String str=input.nextLine().trim();
        StringBuilder stb=new StringBuilder();
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)!=' ') stb.append(str.charAt(i));
            else if(str.charAt(i)==' '){
                stb.append(' ');
                while(str.charAt(i)==' ') i++;
            }
        }
        System.out.println(stb);       
    } 
}

Thực hành Java: Bài 20. Đếm chữ cái, chữ số, từ trong xâu

Hướng dẫn

Sử dụng các phương thức của lớp Character:  .isDigit() để kiểm tra xem ký tự có phải là số không và .isLetter() để kiểm tra xem ký tự có phải chữ cái không

Sử dụng

 str.split("\\s",0) 

để tách xâu thành các xâu con phân cách nhau bởi khoảng trắng. Lưu ý là  method này sẽ tạo ra một số xâu con rỗng nếu trong xâu có từ 2 khoảng trắng liên tiếp trở lên. Vì vậy sau sau khi Split xong tả chỉ đếm các xâu con không rỗng và đó chính là các xâu chứa từ.

 


import java.util.Scanner;
public class Bai20 {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String str=input.nextLine();
        int letterCount=0,digitCount=0,wordCount=0;
        for(int i=0;i<str.length();i++){
            if(Character.isLetter(str.charAt(i))) letterCount++;
            else if(Character.isDigit(str.charAt(i))) digitCount++;                         
        }
        String[] strArr = str.split("\\s",0);
        for (String strArr1 : strArr) {
            if (!strArr1.isEmpty()) 
                wordCount++;         
        }
        System.out.println("So ky tu: "+letterCount);
        System.out.println("So chu so: "+digitCount);
        System.out.println("So tu: "+wordCount);
    }   
}

Thực hành Java: Bài 15. Đếm số lần xuất hiện ký tự

Hướng dẫn

Sử dụng phương thức .charAt(index) để kiểm tra ký tự tại vị trí index trong xâu ký tự


import java.util.Scanner;
public class Bai15 {
public static void main(String[] args) {
     Scanner input=new Scanner(System.in);
     System.out.print("Nhap vao 1 chuoi ky tu:");
     String str=input.next();
     System.out.print("Ky tu can dem so lan xuat hien: ");
     char ch=(char) input.next().charAt(0);
     int count=0;
     for(int i=0;i<str.length();i++)
         if(ch==str.charAt(i)) count++;
     System.out.println("So lan xuat hien "+ch+": "+count);
  }
}

Thực hành Java: Bài 17. Nhập vào một xâu. Tạo ra xâu đảo ngược với xâu đã nhập.

 

Hướng dẫn:

 Bài này có nhiều cách làm như: sử dụng StringBuilder để xây dựng xâu đảo ngược bằng cách append từ ký tự cuối xâu đến ký tự đầu xâu; đọc và in ra màn hình từng ký tự từ cuối xâu đến đầu xâu; sử dụng mảng ký tự. Ở đây tôi sử dụng mảng ký tự để đảo ngược xâu


import java.util.Scanner;

public class Bai17 {

public static void main(String[] args) {

     System.out.println("Xin moi nhap mot xau ky tu: ");

     Scanner input=new Scanner(System.in);

     //Doc vao mot xau

     String xau=input.nextLine();

     //Chuyen xau thanh mang ky tu

     char[] xaudao=xau.toCharArray();

     //Doi vi tri cac ky tu o hai dau xau

     for(int i=0;i<xau.length()/2;i++){

          char temp=xaudao[i];

          xaudao[i]=xaudao[xaudao.length-i-1];

          xaudao[xaudao.length-i-1]=temp;

     }

     //Chuyen mang ky tu thanh xau

     String ketqua= String.valueOf(xaudao);

     System.out.println("xau dao: "+ketqua);

     }

}

Hướng dẫn thực hành các ví dụ bài Lập trình GUI trong Java

Các ví dụ từ vd1-vd5 nhằm giúp cho các bạn mới học lập trình GUI làm quen với việc thiết kế giao diện theo hai cách:

  • Code bằng tay: Các ví dụ 1,2,3,4,6. Các bạn chỉ việc tạo project mới và gõ lại code vào là chạy ngay
  • Thiết kế giao diện bằng bộ công cụ kéo thả: Click phải vào package của dự án, chọn New –> JFrame Form. Sau đó kéo các components thả vào trong cửa sổ thiết kế. Để viết lệnh cho button nào thì Double Click vào button đó rồi viết code.

Các ví dụ đều rất cụ thể, các bạn chỉ việc gõ lại code cẩn thận sao cho thật chính xác, sau đó import đầy đủ thư viện là chạy

Có 2 ví dụ có thể bạn chưa biết cách làm tôi đã đưa lên đây: Ví dụ 4, và đây là Ví dụ 5

Các bạn tải tệp nén về, giải nén ra một thư mục rồi dùng Netbean, vào File–>Open Project, tìm đường dẫn tới vị trí dự án vừa giản nén.

Khuyến khích các bạn khi thiết kế giao diện nên code bằng tay để dễ dàng quản lý giao diện hơn và chuyên nghiệp hơn.

Các bạn chú ý tải  về làm ví dụ nhé:  Ví dụ 4, và  Ví dụ 5 . Tham khảo hai ví dụ này các bạn có thể làm các bài tập còn lại của phần Gui,. Chúc các bạn thành công

Hướng dẫn Bài 3 phần Bài tập 2.1: Hướng đối tượng trong Java

Theo đề nghị của một số bạn, sau khi hướng dẫn xong bài tập số 1, mình hướng dẫn tiếp bài số 3 trong phần lập trình hướng đối tượng trong Java.

Các bài tập khác làm tương tự, sau khi đọc bài này kỹ lưỡng thì các bài khác các bạn sẽ làm dễ dàng

Trong bài này, tôi đặt method main vào trong lớp NhanVien luôn, không tách ra thêm lớp khác để các bạn dễ theo dõi. Tôi cũng sử dụng hai phương pháp nhập dữ liệu là lớp Scanner và BufferedReader, nếu chỉ dùng Scanner thì ta không cần thêm throw Exception ở method main.

Toàn bộ code của bài tập như sau:


package nhanvien;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;
public class NhanVien {
String maNV;
int soSP;
public NhanVien() {
this.maNV="";
this.soSP=0;
}
public NhanVien(String maNV, int soSP) {
if(soSP<0) soSP=0;
this.maNV = maNV;
this.soSP = soSP;
}
public String getMaNV() {
return maNV;
}
public void setMaNV(String maNV) {
this.maNV = maNV;
}
public int getSoSP() {
return soSP;
}
public void setSoSP(int soSP) {
if(soSP<0) soSP=0;
this.soSP = soSP;
}
public boolean coVuotChuan(){
return this.soSP > 500;
}
public String getTongKet(){
String temp="";
if(this.coVuotChuan()) temp="Vuot";
return temp;
}
public double getLuong(){
return this.coVuotChuan()? (500*20000+(this.soSP-500)*30000):this.soSP*20000;
}
public static void xuatTieuDe(){
System.out.println("MaNV \t| So San Pham\t| Luong \t| Tong Ket \t|");
}
@Override
public String toString() {
return this.maNV +"\t|" + this.soSP +"\t|" + this.getLuong()+"\t|"+this.getTongKet()+"\t|";
}
@SuppressWarnings("static-access")
public static void main(String[] args) throws Exception {
Scanner input = new Scanner(System.in);
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String maso;
int sosp;
System.out.println("Nhan vien 1: Nhap Maso va So sp");
maso=input.nextLine();
sosp=Integer.parseInt(input.nextLine());
NhanVien nv1 = new NhanVien(maso,sosp);
System.out.println("Nhan vien 2: Nhap Maso va So sp");
maso=in.readLine();
sosp=Integer.parseInt(in.readLine());
NhanVien nv2 = new NhanVien(maso, sosp);
xuatTieuDe();
System.out.println(nv1.toString());
System.out.println(nv2.toString());
}
}