Bài tập về Java OOP & GUI (tiếp tục trên P1)

Em chào mọi người, sorry vì em hỏi hơi nhiều nhưng em cảm thấy những bài tập này hơi khó so với trình độ sinh viên học kì 1 năm Nhất như em
Như bài hôm trước em đã mò mẫm hoàn thiện kha khá
b1
b3
b4

Đối với bài 1, theo em được hiểu tức là em phải implements Comparable
Cơ mà khi em thực hiện

    public int compareWidth(Rectangle rec) 
    {
        if (this.width == rec.width)
        {
            return 0;
        }
        
        else if(this.width > rec.width)
        {
            return 1;
        }
        else
            return -1;
    }
    public int compareHeight(Rectangle rec)
    {
        if (this.height == rec.height)
        {
            return 0;
        }
        
        else if(this.height > rec.height)
        {
            return 1;
        }
        else
            return -1;
    }

Thì em chưa thấy được sự áp dụng của compareTo() cho cái này lắm, không biết em làm sai ở đâu.
Đối với các bài còn lại anh chị có thể chỉ cho em hint để em tìm ra phương pháp giải không
Bài 2 thì em nghĩ sẽ tạo ra 1 static variable là numRect?

Em cảm ơn

Đúng rồi, dùng nó để kiểm tra tạo đủ 5 cái chưa.
Bài 1 nó kiêu em implemens Comparable sẵn để dùng cho các bài tập sau mà.

Anh nghĩ giáo viên đưa cho em source sẳn rồi em update thêm các bước, chứ không phải làm từ đầu đúng ko?

2 Likes

Dạ tức la trong file mà có design thì em được source sẵn ví dụ như btnPrintActionPerformed (Em ví dụ tên)
Vậy như cái của bài 1 là em làm đúng rồi huh anh?
Nó sẽ tự động tạo

   public int compareTo(Rectangle o) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    

nhưng em chưa thao tác gì trên đó.
Anh có thể chỉ thêm hint để em có thể tìm ra cách giải câu 2 không ạ

Thì bây giờ bạn triển khai phương thức này.
Nguyên mẫu phương thức này yêu cầu (thường là) sẽ trả về 3 trạng thái: nhỏ hơn (số âm, thường là -1), bằng (số 0) và lớn hơn (số dương thường là +1).
Theo cách nghĩ của bạn thì khi nào 2 hình nhỏ, bằng hoặc lớn thì bạn viết theo hướng đó.

1 Like

Bài hai có một cái gọi là “object pool pattern” mà khoan tìm hiểu nó. học nhiều sẽ biết.
đơn giản thì như sau :

class Rec {
     int static numbRec
    public  void addRec (){
    if (numRec < =5) {
      // add rec
  }  else {
     // show loi
}

}
}
1 Like

Hướng đi của em dựa trên anh chỉ

  private void btnDrawActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
        Graphics g = this.getGraphics();
        
        String cmbText = cmbQuad.getItemAt(cmbQuad.getSelectedIndex());
        
//        clear();
        
        // Draw the appropriate polygon depending on the value of cmbText
        
        Quadrilateral shape = null;
        if(cmbText.equals("Quadrilateral"))
        {
            shape = new Quadrilateral();
            
        }
        else if(cmbText.equals("Rectangle"))
        {
            fillWidth();
            fillHeight();
            int width = Integer.parseInt(txtWidth.getText());
            int height = Integer.parseInt(txtHeight.getText());
            shape = new Rectangle(width, height);
            
        }
        else
        {
            fillWidth();
            int side = Integer.parseInt(txtWidth.getText());
            shape = new Square(side);
        }
        

        if (numOfRect < 5)
        {
            shape.draw(g);
            numOfRect++;
        }
        else
        {
            JOptionPane.showMessageDialog(null, "Only showing 5 ");
            
        }
        
        
    }   

Không biết có đúng ý anh không, em có thử chạy thì nó sẽ chạy được 5 hình và dừng. Nhiệm vụ tiếp theo em cần làm là làm sao triển khai được cái array ở dấu chấm 2 và áp dụng Square vào thì phải.

Bài 2.
Tạo 1 mảng 5 phần tử kiểu Rectangle (có thể tên là rectangles) và 1 trường kiểu int tên numOfRect. Mỗi lần thêm 1 hình mới thì kiểm tra số lượng dựa vào numOfRect và thêm vào mảng nếu nhỏ hơn 5, thông báo lỗi nếu lớn hơn 5.
Lưu ý: Bài 2 không hề yêu cầu tạo mới 1 lớp nào hết, chỉ yêu cầu thêm vào lớp DrawingFrom (có sẵn từ các bài tập trước). Từ vẽ 1 hình có thể vẽ nhiều (< 5) hình.

1 Like

Dạ em trình bày bài làm của em theo hướng dẫn của anh.
Đầu tiên em tạo trong DrawingForm.java

 static int numOfRect = 0;
 Rectangle[] array = new Rectangle[5];

Sau đó em làm

    private void btnDrawActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
        Graphics g = this.getGraphics();
        
        String cmbText = cmbQuad.getItemAt(cmbQuad.getSelectedIndex());
        
//        clear();
        
        // Draw the appropriate polygon depending on the value of cmbText
        
        Quadrilateral shape = null;
        if(cmbText.equals("Quadrilateral"))
        {
            shape = new Quadrilateral();
            
        }
        else if(cmbText.equals("Rectangle"))
        {
            fillWidth();
            fillHeight();
            int width = Integer.parseInt(txtWidth.getText());
            int height = Integer.parseInt(txtHeight.getText());
            shape = new Rectangle(width, height);
            
        }
        else
        {
            fillWidth();
            int side = Integer.parseInt(txtWidth.getText());
            shape = new Square(side);
        }
        

        if (numOfRect < 5)
        {
           array[NumofRect] = shape;
            shape.draw(g);
            numOfRect++;
        }
        else
        {
            JOptionPane.showMessageDialog(null, "Only showing 5 ");
            
        }
        
        
    }       

Tới đây em chưa hiểu phần Add to Array mình sẽ làm gì trong

private void btnAddToArrayActionPerformed(java.awt.event.ActionEvent evt) {                                              
        // TODO add your handling code here:
    }            

hay vấn đề dấu chấm 3 là Square.
Như tiến trình hiện tại của em vậy là có đi đúng hướng không anh

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?