CĂN BẢN
CHUỖI
VÒNG LẶP
NUMBER
INPUT / OUTPUT
COLLECTIONS
Ví dụ danh sách liên kết đơn Java Đếm số node trong Singly Linked List trong Java Đảo ngược thứ tự của Singly Linked List trong Java Xóa node đầu tiên của Singly Linked List trong Java Xóa node ở giữa của Singly Linked List trong Java Xóa node cuối cùng của Singly Linked List trong Java Thêm node vào vị trí đầu tiên của Singly Linked List trong Java Thêm node vào vị trí cuối cùng của Singly Linked List trong Java Thêm node vào vị trí giữa của Singly Linked List trong Java Kiểm tra danh sách liên kết đơn palindrome trong Java Tìm giá trị lớn nhất của Singly Linked List trong Java Tìm giá trị nhỏ nhất của Singly Linked List trong Java Xóa phần tử trùng lặp khỏi Singly Linked List trong Java Tìm kiếm phần tử của Singly Linked List trong Java Tạo một Circular Linked List trong Java Tạo một Circular Linked List Java và đảo ngược nó Xóa node đầu tiên của Circular Linked List trong Java Xóa node cuối cùng của Circular Linked List trong Java Xóa node ở giữa của Circular Linked List trong Java Thêm node vào vị trí đầu tiên của Circular Linked List trong Java Thêm node vào vị trí cuối cùng của Circular Linked List trong Java Thêm node vào vị trí giữa của Circular Linked List trong Java Tìm giá trị lớn nhất trong Circular Linked List Java Tìm giá trị nhỏ nhất trong Circular Linked List Tìm kiếm phần tử của Circular Linked List trong Java Xóa phần tử trùng lặp khỏi Circular Linked List trong Java Sắp xếp các phần tử của Circular Linked List trong Java Chuyển đổi Binary Tree thành Double Linked List trong Java Tạo double linked list từ cây bậc ba (ternary tree) trong Java Cách chuyển đổi từ cây nhị phân thành cây nhị phân tìm kiếm trong Java Xác định các lá có cùng cấp trong Tree của Java Kiểm tra hai cây giống nhau trong Java Tìm chiều rộng tối đa của cây nhị phân trong Java Tìm phần tử lớn nhất của cây nhị phân trong Java Tìm khoảng cách lớn nhất giữa các node của cây nhị phân trong Java Tìm phần tử nhỏ nhất của cây nhị phân trong Java Tính tổng giá trị của các node của cây nhị phân trong Java Tính tổng số cây nhị phân tìm kiếm có thể được tạo ra bởi N nodes trong Java Triển khai cây nhị phân từ danh sách liên kết trong Java Tìm kiếm node của cây nhị phân tìm kiếm trong Java Cách tạo ra Mirror Tree từ Binary Tree bằng ngôn ngữ Java Xác định các lá của binary tree sử dụng preoder trong Java Xác định đường biên(boundary traversal) của cây nhị phân trong Java Xóa node của cây nhị phân tìm kiếm trong Java Duyệt cây nhị phân bằng phương pháp inOder trong Java
CALCULATE
SẮP XẾP - TÌM KIẾM
KHÁC
NÂNG CAO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Bài tập Java OOP: Chương tình tính diện tích đa giác

Trong bài tập này chúng ta sẽ thực hiện chương trình tính diện tích đa giác bằng ngôn ngữ Java. Sử dụng tính kế thừa trong Java để thực hiện chương trình.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Đề bài: Tính diện tích đa giác.

  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 tính diện tích tam giác.
  3. Các lớp cần phải đảm bảo tính đóng gói và kế thừa.
  4. 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 danh sách theo dạng bảng n tam giác.
  5. In ra các cạnh của các tam giác có diện tích lớn nhất.
  6. Tìm kiếm và in ra tam giác theo vị trí (index) nhập vào.
  7. Xóa 1 tam giác tại vị trí nhập vào.
  8. Sắp xếp mảng tam giác tăng dần theo diện tích.

Chương trình tính diện tích đa giác.

Hướng dẫn:

Chúng ta sẽ yêu cầu người dùng nhập vào số lượng tam giác với các thuộc tính chung ở class DaGiac và các thuộc tính riêng ở class TamGiac, hãy cùng đi theo các bước dưới đây:

  • Đầu tiên chúng ta sẽ tạo class DaGiac gồm các thuộc tính: soCanh, a[ ].
  • Trong class DaGiac xây dựng các constructor và các phương thức getter, setter. Xây dựng phương thức tính chu vi và in giá trị các cạnh của đa giác và xây dựng phương thức xuất đa giác.
  • Tiếp đến xây dựng class TamGiac kế thừa từ class DaGiac, trong đó viết đè thêm hàm tính chu vi và xây dựng thêm phương thức tính diện tích tam giác.
  • Tiếp theo sẽ tạo class LístTamGiac với các phương thức nhập tam giác, xuất tam giác, tìm kiếm tam giác theo vị trí index, xóa tam giác theo vị trí nhập vào và cuối cùng là sắp xếp tam giác theo diện tích.
  • Cuối cùng sẽ tạo class Main để tạo menu và gọi các phương thức đã viết để chạy chương trình.
DaGiac
import java.util.Arrays;
import java.util.Scanner;

public class DaGiac {
    //Khai báo các thuộc tính
    protected int soCanh;
    protected int a[];
    Scanner scanner = new Scanner(System.in);
    //khởi tạo constructor mặc định
    public DaGiac() {
        this.soCanh = 0;
        this.a = null;
    }
    //Khởi tạo constructor có tham số
    public DaGiac(int soCanh, int[] a, Scanner scanner) {
        this.soCanh = soCanh;
        this.a = a;
        this.scanner = scanner;
    }

    public int getSoCanh() {
        return soCanh;
    }

    public void setSoCanh(int soCanh) {
        this.soCanh = soCanh;
    }

    public int[] getA() {
        return a;
    }

    public void setA(int[] a) {
        this.a = a;
    }

    public Scanner getScanner() {
        return scanner;
    }

    public void setScanner(Scanner scanner) {
        this.scanner = scanner;
    }
    //Khởi tạo phương thức nhập
    protected void nhap(){
        do{
            System.out.println("Nhập vào số cạnh: ");
            this.soCanh = scanner.nextInt();

        }while(this.soCanh <= 2);
        for (int i = 0; i < this.soCanh; i++) {
            System.out.println("Nhập cạnh thứ "+(i+1)+" :");
            this.a[i] = scanner.nextInt();
        }
    }
    //khởi tạo phương thức tính chu vi
    protected int tinhCV(){
        int cv = 0;
        for (int i = 0; i < this.soCanh; i++) {
            cv += this.a[i];
        }
        return cv;
    }

    @Override
    public String toString() {
        return "DaGiac{" +
                "soCanh=" + soCanh +
                ", a=" + Arrays.toString(a) +
                '}';
    }
    //khởi tạo phương thức xuất đa giác
    protected void xuatDaGiac(){
        System.out.println("Độ dài các cạnh lần lượt là: ");
        for (int i = 0; i < this.soCanh; i++) {
            if(i < (this.soCanh-1)){
                System.out.print(this.a[i] + "\t  \t");
            }
            else{
                System.out.println(this.a[i]);
            }
        }
        System.out.println("--------------------End--------------------");
    }
}

Ở lớp này chúng ta chỉ đơn giản khởi tạo các constructor và getter, setter, viết một phương thức tính chu vi là tinhCV() và phương thức xuatDaGiac() để hiện thị độ dài các tam giác ra màn hình.

Bài viết này được đăng tại [free tuts .net]

TamGiac.java
import java.util.Scanner;

public class TamGiac extends DaGiac {
    TamGiac() {
        this.a = new int[3];
        this.soCanh = 3;
    }

    public void nhap() {
        do {
            System.out.println("Nhập số cạnh cho tam giác: ");
            for (int i = 0; i < 3; i++) {
                System.out.println("Nhập cạnh thứ " + (i + 1) + " :");
                this.a[i] = scanner.nextInt();
            }
        } while ((a[0] + a[1]) <= a[2] || (a[1] + a[2]) <= a[0] || (a[0] + a[2]) <= a[1]);
    }

    public int tinhCV() {
        int cv = 0;
        for (int i = 0; i < 3; i++) {
            cv += this.a[i];
        }
        return cv;
    }

    public double tinhDT() {
        double dt = 0;
        int A = a[0];
        int B = a[1];
        int C = a[2];
        double P = (A + B + C) / 2;
        dt = Math.sqrt(P * (P - A) * (P - B) * (P - C));
        return dt;
    }
    public void xuat(){
        super.xuatDaGiac();
    }
}

Trong class này chúng ta sẽ kế thừa từ class DaGiac với các thuộc tính soCanh, a[ ], kèm theo các constructor getter, setter. Sau đó viết đè thêm hàm tính chu vi tinhCV() và hàm tính diện tích tinhDT() và kế thừa hàm xuatDaGiac() từ class cha DaGiac.

ListTamGiac
import java.util.Scanner;
public class ListTamGiac {
    private int n;
    private TamGiac[] list = new TamGiac[100];
    Scanner scanner = new Scanner(System.in);
    public void ListTG(){
        for (int i = 0; i < 100; i++) {
            list[i] = new TamGiac();
        }
    }
    public void List(){
        System.out.println("Nhập số tam giác: ");
        n = scanner.nextInt();
        for (int i = 0; i < n; i++) {
            TamGiac tg = new TamGiac();
            tg.nhap();
            list[i] = tg;
        }
    }
    public void xuat(){
        for (int i = 0; i < n; i++) {
            System.out.println("Tam giác thứ : "+(i+1));
            list[i].xuatDaGiac();
        }
    }
  
    public void xuatLN() {
        double max = list[0].tinhDT();
        int Max = 0;
        for (int i = 0; i < n; i++) {
            if (list[i].tinhDT() > max) {
                max = list[i].tinhDT();
                Max = i;
            }
        }
        System.out.println("Lon nhat: ");
        list[Max].xuatDaGiac();
    }
    public void timKiem(){
        System.out.println("Nhập vị trí của tam giác cần tìm kiếm: ");
        int t = scanner.nextInt();
        if(t > n){
            System.out.println("Vị trí không tồn tại");
        }
        else{
            list[t-1].xuatDaGiac();
        }
    }
    public void xoa(){
        int k = 0;
        System.out.println("Nhập vào vị trí của tam giác cần xóa");
        int x = scanner.nextInt();
        if(x >= n){
            System.out.println("Vị trí không tồn tại");
        }
        else{
            for (int i = 0; i < n; i++) {
                if(i != (x-1)){
                    list[k] = list[i];
                    k++;
                }
            }
        }
        n = k;
    }
    public void sapXep(){
        TamGiac temp = list[0];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if(list[i].tinhDT() > list[j].tinhDT()){
                    temp = list[j];
                    list[j] = list[i];
                    list[i] = temp;
                }
            }
        }
    }
}

Trong class này chúng ta cần khai báo một mảng để chứa số lượng tam giác do người dùng nhập vào. Sau khi khai báo chúng ta sẽ bắt đầu thực hiện tạo các phương thức nhập xuất tam giác.

Xây dựng phương thức xuatLN() để xuất tam giác có diện tích lớn nhất.

Xây dựng phương thức timKiem() để tìm kiếm tam giác theo vị trí index do người dùng nhập vào.

Xây dựng phương thức xoa() để xóa đi tam giác mà người dùng nhập vào.

Xây dựng phương thức sắp xếp giảm dần theo diện tích của các tam giác.

Main.java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int x;
        Scanner scanner = new Scanner(System.in);
        ListTamGiac dstg = new ListTamGiac();
        do{
            System.out.println("\n\t ---------------------------------- ");
            System.out.println("\t0. Thoát");
            System.out.println("\t1. Thêm danh sách các tam giác");
            System.out.println("\t2. Xuất danh sách các tam giác");
            System.out.println("\t3. In tam giác có diện tích lớn nhất");
            System.out.println("\t4. Tìm kiếm tam giác theo vị trí index (Nhập từ người dùng)");
            System.out.println("\t5. Xóa 1 tam giác theo vị trí index (Nhập từ người dùng)");
            System.out.println("\t6. Sắp xếp các tam giác theo thứ tự giảm dần theo diện tích");
            System.out.println("\t------------------------------------");
            x = scanner.nextInt();
            System.out.println("--------------------End--------------------");
            switch (x){
                case 1:
                    dstg.List();
                    break;
                case 2:
                    dstg.xuat();
                    break;
                case 3:
                    dstg.xuatMax();
                    break;
                case 4:
                    dstg.timKiem();
                    break;
                case 5:
                    dstg.xoa();
                    break;
                case 6:
                    dstg.sapXep();
                    break;
            }
        }while(x != 0);
        System.out.println(" ");
    }
}

Trong class Main chúng ta tạo Menu với các yêu cầu của bài toán và gọi các phương thức đã viết ở class ListTamGiac ra sử dụng.

Kết quả: Sau khi chạy chương trình chúng ta sẽ được Menu như sau, các bạn có thể kiểm tra từng mục để biết được kết quả sẽ như thế nào.

da giac PNG

Như vậy là chúng ta đã thực hiện xong chương trình tính diện tích hình chữ nhật sử dụng tính Kế Thừa trong Java. Đây là một tính năng rất đặc biệt và được sử dụng rất nhiều trong Java. Chúc các bạn thực hiện thành công!!!

Cùng chuyên mục:

Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java

Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java

Hướng dẫn download file với Spring Boot trong Java

Hướng dẫn download file với Spring Boot trong Java

Hướng dẫn Upload file với Spring Boot trong Java

Hướng dẫn Upload file với Spring Boot trong Java

Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java

Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java

Cách sử dụng Spring  Scheduled trong Spring Boot

Cách sử dụng Spring Scheduled trong Spring Boot

Cách dùng Groovy trong Spring Boot Java

Cách dùng Groovy trong Spring Boot Java

Cách dùng Spring Boot và Mustache trong Java

Cách dùng Spring Boot và Mustache trong Java

Cách dùng Spring Boot và MongoDB trong Java

Cách dùng Spring Boot và MongoDB trong Java

Cách tạo Restful Client bằng RestTemplate trong Spring Boot

Cách tạo Restful Client bằng RestTemplate trong Spring Boot

Hướng dẫn sử dụng Interceptor trong Spring Boot

Hướng dẫn sử dụng Interceptor trong Spring Boot

Sử dụng Twitter Bootstrap trong Spring Boot

Sử dụng Twitter Bootstrap trong Spring Boot

Tạo trang web đa ngôn ngữ với Spring Boot trong Java

Tạo trang web đa ngôn ngữ với Spring Boot trong Java

Tạo ứng dụng Chat với Spring Boot và Websocket

Tạo ứng dụng Chat với Spring Boot và Websocket

Sử dụng JUnit để tạo unit test trong Spring Boot

Sử dụng JUnit để tạo unit test trong Spring Boot

Cách triển khai Spring Boot trên Tomcat Server

Cách triển khai Spring Boot trên Tomcat Server

Cách test RESTful API trong Spring Boot

Cách test RESTful API trong Spring Boot

Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền

Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền

Duyệt cây nhị phân bằng phương pháp inOder trong Java

Duyệt cây nhị phân bằng phương pháp inOder trong Java

Xóa node của cây nhị phân tìm kiếm trong Java

Xóa node của cây nhị phân tìm kiếm trong Java

Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java

Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java

Top