2012-07-10 50 views
10

Tôi dường như không thể tìm thấy câu trả lời cho điều này-Tạo hình tam giác cho các vòng

Tôi cần vẽ một hình tam giác đơn giản sử dụng cho vòng lặp.

 * 
    *** 
    ***** 
    ******* 
********* 

tôi có thể làm cho một nửa tam giác, nhưng tôi không biết làm thế nào để thêm vào vòng lặp hiện tại của tôi để tạo thành một hình tam giác đầy đủ.

* 
** 
*** 
**** 
***** 



    for (int i=0; i<6; i++) 
    { 
    for (int j=0; j<i; j++) 
    { 
    System.out.print("*"); 
    } 
    System.out.println(""); 
    } 

Thanks-

+6

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

Trả lời

14

Trước hết, bạn cần phải chắc chắn rằng bạn' tái tạo số lượng chính xác của các biểu tượng *. Chúng ta cần để sản xuất 1, 3, 5 vân vân thay vì 1, 2, 3. Điều này có thể được cố định bằng cách thay đổi các biến truy cập:

for (int i=1; i<10; i += 2) 
{ 
    for (int j=0; j<i; j++) 
    { 
     System.out.print("*"); 
    } 
    System.out.println(""); 
} 

Như bạn có thể thấy, điều này gây ra i để bắt đầu tại 1 và tăng bởi 2 ở mỗi bước, miễn là nhỏ hơn 10 (ví dụ: 1, 3, 5, 7, 9). Điều này cho chúng ta số lượng chính xác của các biểu tượng *. Sau đó, chúng tôi cần sửa mức thụt đầu dòng trên mỗi dòng. Điều này có thể được thực hiện như sau:

for (int i=1; i<10; i += 2) 
{ 
    for (int k=0; k < (4 - i/2); k++) 
    { 
     System.out.print(" "); 
    } 
    for (int j=0; j<i; j++) 
    { 
     System.out.print("*"); 
    } 
    System.out.println(""); 
} 

Trước khi in * ký chúng tôi in một số không gian và số lượng các không gian khác nhau tùy thuộc vào dòng mà chúng ta đang ở trên. Đó là vòng lặp for với biến số k. Chúng ta có thể thấy rằng k lặp trên các giá trị 4, 3, 2, 10 khi ì1, 3, 5, 79. Đây là những gì chúng ta muốn bởi vì chúng ta càng cao trong tam giác, chúng ta càng cần nhiều không gian hơn. Chúng ta càng đi sâu vào tam giác, chúng ta cần ít không gian hơn và dòng cuối cùng của tam giác thậm chí không cần khoảng trống.

2

Bài tập về nhà câu hỏi? Vâng, bạn có thể sửa đổi ban đầu 'tam giác vuông' mã của bạn để tạo ra một đảo ngược 'tam giác vuông' với không gian Vì vậy, đó sẽ như

for(i=0; i<6; i++) 
{ 
for(j=6; j>=(6-i); j--) 
{ 
    print(" "); 
} 
for(x=0; x<=((2*i)+1); x++) 
{ 
    print("*"); 
} 
print("\n"); 
} 
+0

Đó là có, tôi hoàn toàn mới với java –

1
for (int i=0; i<6; i++) 
    { 
    for (int k=0; k<6-i; k++) 
    { 
     System.out.print(" "); 
    } 
    for (int j=0; j<i*2+1; j++) 
    { 
     System.out.print("*"); 
    } 
    System.out.println(""); 
    } 
17

Một niềm vui, giải pháp đơn giản:

for (int i = 0; i < 5; i++) 
    System.out.println(" *********".substring(i, 5 + 2*i)); 
3

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().
2

Hãy thử này trong Java

for (int i = 6, k = 0; i > 0 && k < 6; i--, k++) { 
    for (int j = 0; j < i; j++) { 
     System.out.print(" "); 
    } 
    for (int j = 0; j < k; j++) { 
     System.out.print("*"); 
    } 
    for (int j = 1; j < k; j++) { 
     System.out.print("*"); 
    } 
    System.out.println(); 
} 
1

này sẽ trả lời cho câu hỏi của bạn. bỏ ghi chú mã nhận xét để chỉ hiển thị dòng bên ngoài :)

public class TrianglePattern { 

    public static void main(String[] args) { 
     // This logic will generate the triangle for given dimension 
     int dim = 10; 
     for (int i = 0; i < dim; i++) { 
      for (int k = i; k < dim; k++) { 
       System.out.print(" "); 
      } 
      for (int j = 0; j <= i; j++) { 
       //if (i != dim - 1) 
       // if (j == 0 || j == i) 
       //  System.out.print("*"); 
       // else 
       //  System.out.print(" "); 
       //else 
        System.out.print("*"); 
       System.out.print(" "); 
      } 
      System.out.println(""); 
     } 
    } 
} 
1
private static void printStar(int x) { 
    int i, j; 
    for (int y = 0; y < x; y++) { // number of row of '*' 

     for (i = y; i < x - 1; i++) 
      // number of space each row 
      System.out.print(' '); 

     for (j = 0; j < y * 2 + 1; j++) 
      // number of '*' each row 
      System.out.print('*'); 

     System.out.println(); 
    } 
} 
3

suy nghĩ đầu tiên của một giải pháp mà không mã. Ý tưởng là in một số lẻ *, tăng theo dòng. Sau đó căn giữa * bằng cách sử dụng dấu cách. Biết số lượng tối đa * trong dòng cuối cùng, sẽ cung cấp cho bạn số lượng dấu cách ban đầu để căn giữa đầu tiên *. Bây giờ viết nó trong mã.

0

này cho phép bạn có quyền kiểm soát nhiều hơn một chút và một thời gian dễ dàng hơn làm cho nó:

public static int biggestoddnum = 31; 

public static void main(String[] args) { 
    for (int i=1; i<biggestoddnum; i += 2) 
    { 
     for (int k=0; k < ((biggestoddnum/2) - i/2); k++) 
     { 
      System.out.print(" "); 
     } 
     for (int j=0; j<i; j++) 
     { 
      System.out.print("*"); 
     } 
     System.out.println(""); 
    } 
} 

Chỉ cần thay đổi giá trị public static int biggestoddnum 's thành bất kỳ số lẻ bạn muốn nó được, và for(int k...) đã được thử nghiệm để làm việc .

Các vấn đề liên quan