用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(""); }
正如你所看到的,这导致i
从1
开始,每增加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(""); }
在打印*
符号之前,我们打印一些空格,并且空格的数量根据我们所在的行而不同。 这就是k
variables的for循环。 我们可以看到,当“ 7
和9
时, 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。