2012-07-10 164 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...)已经过测试工作。