Đề 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).
Kiến thức cần nắm
– 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é:
- Viết chương trình vẽ hình tam giác đặc bằng số – Bài 1
- 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]
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();
}
}
}