用for循环创build一个三angular形

我似乎无法find这个答案 –

我需要使用for循环绘制一个简单的三angular形。

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

我可以做一个三angular形,但我不知道如何添加到我目前的循环,形成一个完整的三angular形。

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

谢谢-

首先,你需要确保你正在生成正确数量的*符号。 我们需要产生1,3,5等等而不是1,2,3。这可以通过修改计数器variables来解决:

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

正如你所看到的,这导致i1开始,每增加2 ,只要它小于10 (即9 )。 这给了我们正确数量的*符号。 然后,我们需要修复每行的缩进级别。 这可以如下完成:

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

在打印*符号之前,我们打印一些空格,并且空格的数量根据我们所在的行而不同。 这就是kvariables的for循环。 我们可以看到,当“ 79时, k遍历值ì0 。 这是我们想要的,因为我们三angular形的高度越高,我们需要放置的空间就越多。 我们越离开三angular形,我们需要的空间就越less,三angular形的最后一行根本就不需要空格。

一个有趣的简单的解决scheme

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

我很欣赏OP是Java新手,所以方法可能被认为是“先进的”,但是我认为值得用这个问题来展示如何通过分解来解决问题。

让我们考虑编写一个方法来打印一行,告诉方法是哪一行号码:

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

我们必须打印一定数量的空间,然后打印一定数量的星星。

看看这个例子,我可以看到(如果第一行是0),它是(5行数)个空格和(2 * rowNumber + 1)个星。

我们来创build一个方法来打印我们的字符行,然后使用它:

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

现在你可以自己testing printSequence了,你可以自己testing printTriangleLine。 现在你可以直接在main()调用这些方法来试试

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

…运行它并validation(用你的眼睛)它输出:

 aaa ***** 

当你进一步编程时,你会想要使用像jUnit这样的unit testing框架 。 而不是打印,你更可能写一些像printTriangleLine这样的东西来返回一个String(你可以从程序中的更高的位置打印出来),然后用下面这样的命令自动执行testing:

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

现在我们有我们需要绘制一个三angular形的部分。

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

我们写的代码比其他人给出的答案要长一点。 但是我们已经能够testing每个步骤,并且我们有方法可以在其他问题中再次使用。 在现实生活中,我们必须在把问题分解成多种方法之间find适当的平衡,否则就太less了。 我倾向于select很多很短的方法。

额外的信用:

  • 适应这个,而不是打印到System.out,方法返回一个string – 所以在你的main()你可以使用System.out.print(drawTriangle())
  • 调整这个,这样你可以问drawTriangle()为不同的大小 – 也就是说,你可以调用drawTriangle(3)drawTriangle(5)
  • 使其适用于更大的三angular形。 提示:您将需要为printTriangleLine()添加一个新的“宽度”参数。

首先想想没有代码的解决scheme。 这个想法是打印一个奇数的*,逐行增加。 然后使用空格将*置中。 知道最后一行中*的最大数量,会给出第一个*的居中空间的初始数量。 现在写在代码中。

家庭作业问题? 那么你可以修改你原来的“直angular三angular形”的代码来产生一个倒空的“直angular三angular形”的空间所以这就像

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

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

这将回答你的问题。 取消评论的代码注释只显示外行:)

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

这可以让你有更多的控制和更容易的时间:

 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...)已经过testing。