Tôi đánh giá cao OP còn xa lạ với Java, vì vậy phương pháp có thể được coi là "tiên tiến", tuy nhiên tôi nghĩ rằng nó có giá trị sử dụng vấn đề này để chứng tỏ bạn có thể tấn công một vấn đề bằng cách phá vỡ nó thành từng mảnh.
Hãy nghĩ về cách viết một phương pháp để in một dòng duy nhất, nói với các phương pháp mà dòng số đó là:
public void printTriangleLine(int rowNumber) {
// we have to work out what to put here
}
Chúng ta phải in một số số lượng chỗ, sau đó một số số của các ngôi sao.
Nhìn vào ví dụ, tôi có thể thấy rằng (nếu hàng đầu tiên là 0) đó là (5-rowNumber) không gian và (2 * rowNumber + 1) sao.
Hãy phát minh ra một phương pháp mà in các hàng của các nhân vật đối với chúng tôi, và sử dụng nó:
public void printTriangleLine(int rowNumber) {
printSequence(" ", 5 - rowNumber);
printSequence("*", 2 * rowNumber + 1);
System.out.println();
}
Điều đó sẽ không biên dịch cho đến khi chúng tôi thực sự viết printSequence(), vì vậy chúng ta hãy làm điều đó:
public void printSequence(String s, int repeats) {
for(int i=0; i<repeats; i++) {
System.out.print(s);
}
}
Bây giờ bạn có thể kiểm tra printSequence ngày của riêng mình, và bạn có thể kiểm tra printTriangleLine ngày của riêng mình. Còn bây giờ bạn chỉ có thể thử bằng cách gọi những phương pháp trực tiếp trong main()
public static void main(String [] args) {
printSequence("a",3);
System.out.println();
printTriangleLine(2);
}
... chạy nó và xác minh (với đôi mắt của bạn) mà nó ra:
aaa
*****
Khi bạn nhận được thêm vào lập trình, bạn sẽ muốn sử dụng khung kiểm tra đơn vị như jUnit. Thay vì in ấn, bạn muốn nhiều khả năng ghi những thứ như printTriangleLine để trả về một String (mà bạn muốn in từ cao hơn trong chương trình của bạn), và bạn sẽ tự động kiểm tra của bạn với các lệnh như:
assertEquals(" *****", TriangleDrawer.triangleLine(2));
assertEquals(" *", TriangleDrawer.triangleLine(0))
Bây giờ chúng ta có các phần chúng ta cần vẽ một hình tam giác.
public void drawTriangle() {
for(int i=0; i<5; i++) {
printTriangleLine(i);
}
}
Mã chúng tôi viết dài hơn một chút so với câu trả lời của người khác. Nhưng chúng tôi đã có thể kiểm tra từng bước và chúng tôi có các phương pháp mà chúng tôi có thể sử dụng lại trong các vấn đề khác. Trong cuộc sống thực, chúng ta phải tìm sự cân bằng hợp lý giữa việc phá vỡ một vấn đề thành quá nhiều phương pháp, hoặc quá ít. Tôi có xu hướng thích nhiều phương pháp thực sự ngắn.
Đối với tín dụng thêm:
- thích ứng này để thay vì in ấn để System.out, các phương pháp trả về một String - vì vậy trong chính bạn(), bạn có thể sử dụng
System.out.print(drawTriangle())
- thích ứng này để bạn có thể yêu cầu drawTriangle() cho các kích thước khác nhau - tức là bạn có thể gọi
drawTriangle(3)
hoặc drawTriangle(5)
- làm cho nó hoạt động cho hình tam giác lớn hơn. Gợi ý: bạn sẽ cần phải thêm một tham số "chiều rộng" mới vào printTriangleLine().
Tại đây bạn có thể tìm thấy giải pháp- http://java4732.blogspot.in/2016/08/pyramid-programs-in-java.html – Umesh