Bài tập Javacore: Vẽ hình tam giác đặc bằng dấu sao – Bài 3

Đề bài: Viết chương trình vẽ hình tam giác đặc bằng dấu sao (hình mẫu bên dưới).

Bài tập Javacore: Vẽ hình tam giác đặc bằng dấu sao - Bài 3

Kiến thức cần nắm

Vòng lặp For trong Java

Nhập dữ liệu từ bàn phím sử dụng Scanner

Phân tích

Để vẽ được hình này, các bạn cần nắm rõ cách vẽ chung của một hình tam giác bất kỳ.

Để vẽ một hình tam giác, chúng ta cần ít nhất 2 vòng lặp for: 1 vòng lặp ngoài để in ký tự xuống dòng, 1 hoặc nhiều vòng lặp con bên trong dùng để in các ký tự, con số, dấu sao hoặc dấu cách.

Bạn có thể tham khảo 2 bài này trước để biết cách vẽ một hình tam giác đã nhé:

  1. Viết chương trình vẽ hình tam giác đặc bằng số – Bài 1
  2. Viết chương trình vẽ hình tam giác đặc bằng số – Bài 2

Quay lại với hình mẫu, khi nhìn vào hình mình có nhận xét chung như thế này: Hình được tạo bởi 2 hình (hình tam giác ngược và hình tam giác khuyết đỉnh). Vậy chúng ta sẽ vẽ riêng 2 hình và cứ áp dụng cách vẽ một hình tam giác thông thường vào. Mỗi hình tam giác lại chia thành 3 phần để vẽ, cuối cùng sẽ có được hình như đề mong muốn.

Code mẫu

(Các bạn có thể chạy từng phần code để hiểu rõ hơn cách vẽ nhé)

package com.ngockhuong.exercise;

import java.util.Scanner;

public class NumberTriangle {
	public static void main(String[] args) {
		int num, n;
		Scanner sc = new Scanner(System.in);
		System.out.print("Nhập n: ");
		num = sc.nextInt();
		System.out.println();
		n = num;
		// vẽ phần tam giác ngược
		for (int r = 1; r <= num; r++) {
			// phần 1
			for (int sp = 1; sp <= r; sp++) {
				System.out.print(" ");
			}
			// phần 2
			for (int c = 1; c <= n; c++) {
				System.out.print("*");
			}
			// phần 3
			for (int c = num - r; c >= 1; c--) {
				System.out.print("*");
			}
			n--;
			System.out.println();
		}
		
		// vẽ tam giác khuyết đỉnh
		for (int r = 2; r <= num; r++) {
			// phần 1
			for (int sp = num - r + 1; sp >= 1; sp--) {
				System.out.print(" ");
			}
			// phần 2
			for (int c = 1; c <= r; c++) {
				System.out.print("*");
			}
			// phần 3
			for (int c = r - 1; c >= 1; c--) {
				System.out.print("*");
			}
			System.out.println();
		}

	}
}

Kết quả

Nhập n: 5

 *********
  *******
   *****
    ***
     *
    ***
   *****
  *******
 *********
[alert-success]

Note

Bên trên là những phân tích theo cách hiểu của mình, các bạn có thể hiểu theo một hướng khác miễn sao vẽ được hình như mong muốn. Còn Code mẫu chỉ mang tính tham khảo, nếu có gì sai sót mong các bạn góp ý giúp mình nhé.

Bài này có thể còn nhiều cách vẽ khác, nếu bạn có cách nào hay thì để lại ý tưởng hoặc code bên dưới bình luận để mọi người cùng tham khảo với nhé.

[/alert-success]
5 3 votes
Đánh giá bài viết
Nhận thông báo
Thông báo khi có
guest

1 Bình luận
cũ nhất
mới nhất vote nhiều nhất
Phản hồi nội tuyến
Xem tất cả các bình luận
namhunter

package CacBaiTap1;

import java.util.Scanner;

public class VeTamGiacDacBangDauSaoBai3 {
public static void main(String[] args) {
int h;
Scanner scanner = new Scanner(System.in);
h = scanner.nextInt();
for(int i=1; i0;sp–){
System.out.print(” “);
}for(int j=0; j<=2*h-2*i; j++){
System.out.print(" * ");
}System.out.println();
}for(int a=2; a0; sp2–){
System.out.print(” “);
}for(int b=1; b<=2*a-1; b++ ){
System.out.print(" * ");
}System.out.println();
}

}
}