2012-07-10 161 views
10

我似乎無法找到答案 -用for循環創建一個三角形

我需要使用for循環繪製一個簡單的三角形。

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

我可以做一個半三角形,但我不知道如何添加到我的電流回路,形成一個完整的三角形。

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



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

Thanks-

+6

在這裏你可以找到你的解決方案 - http://java4732.blogspot.in/2016/08/pyramid-programs-in-java.html – Umesh 2016-09-15 19:29:49

回答

14

首先,你需要確保你」重新生成正確數量的符號。我們需要產生通過修改計數器變量1,3,5等等,而不是1,2,3,這可以是固定的:

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

正如你所看到的,這將導致在i1增加啓動(即,1,3,5,7,9)在每一個步驟處爲2。這給了我們正確數量的*符號。然後我們需要修復每行的縮進級別。這是可以做到如下:

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(""); 
} 

之前打印*符號,我們打印一些空間和空間的數量取決於我們就行了變化。這就是k變量的for循環的用途。我們可以看到,k迭代值43210ì13579。這是我們想要的,因爲我們三角形中的高度越高,我們需要放置的空間就越多。我們越下三角形,我們需要的空間就越少,三角形的最後一行根本就不需要空格。

2

家庭作業的問題? 那麼你可以修改原來的「直角三角形」代碼來生成一個倒「右三角」與空間 這樣就會像

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

這是的,我完全是新的Java – 2012-07-10 09:06:37

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

一個有趣的,簡單的解決方案:

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

我欣賞的OP是一個新的Java,所以方法可能會被認爲是「先進」,但是我覺得它用這個問題來向您展示如何攻擊的價值問題通過分解成碎片。

讓我們想想寫一個方法來打印一行,告訴它是數線的方法:

public void printTriangleLine(int rowNumber) { 
    // we have to work out what to put here 
} 

我們要打印一些數量的空格,然後一些星數。看看這個例子,我可以看到(如果第一行是0),它是(5行號)空格和(2 * rowNumber + 1)個星號。

讓我們創造一個打印字符的行,我們的方法,並使用它:

public void printTriangleLine(int rowNumber) { 
    printSequence(" ", 5 - rowNumber); 
    printSequence("*", 2 * rowNumber + 1); 
    System.out.println(); 
} 

這將無法編譯,直到我們實際編寫printSequence(),所以讓我們做到這一點:

public void printSequence(String s, int repeats) { 
    for(int i=0; i<repeats; i++) { 
     System.out.print(s); 
    } 
} 

現在你可以測試 printSequence本身,你可以測試 printTriangleLine在它自己。現在你可以嘗試一下通過直接調用這些方法在main()

public static void main(String [] args) { 
    printSequence("a",3); 
    System.out.println(); 
    printTriangleLine(2); 
} 

...運行和驗證(用眼睛),它輸出:

aaa 
    ***** 

當你進一步進入編程,你會想要像使用jUnit一樣使用單元測試框架。除了打印,你會更容易寫的東西像printTriangleLine返回一個字符串(你會從更高的打印在你的程序),你將通過類似的命令自動化您的測試:

assertEquals(" *****", TriangleDrawer.triangleLine(2)); 
assertEquals("  *", TriangleDrawer.triangleLine(0)) 

現在我們有我們需要繪製一個三角形的作品。

public void drawTriangle() { 
    for(int i=0; i<5; i++) { 
     printTriangleLine(i); 
    } 
} 

我們寫的代碼比其他人給出的答案稍長一點。但是我們已經能夠測試每個步驟,並且我們有方法可以在其他問題中再次使用。在現實生活中,我們必須找到將問題分解爲太多方法或者太少的方法之間的適當平衡。我傾向於選擇很多很短的方法。

對於額外的信貸:

  • 適應這一點,以便代替打印到System.out,該方法返回一個字符串 - 所以在你的main(),您可以使用System.out.print(drawTriangle())
  • 適應這一點,以便你可以問drawTriangle()的大小不同 - 也就是說,你可以撥打drawTriangle(3)drawTriangle(5)
  • 使它適用於更大的三角形。提示:您需要爲printTriangleLine()添加一個新的「寬度」參數。
2

嘗試在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

這一個這將回答你的問題。取消對註釋的代碼,以便只顯示外部線:)無代碼的溶液

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

首先想到。這個想法是打印奇數個*,逐行增加。然後使用空格將*置中。知道最後一行中*的最大數量,將會給出以第一個*爲中心的初始空格數量。現在寫在代碼中。

0

這讓你有更多的控制和更輕鬆地使其:

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(""); 
    } 
} 

只要改變public static int biggestoddnum的價值,無論奇數你希望它是,並且for(int k...)已經過測試工作。