*
*****
*********
*********
**** ***
**** ***
到目前为止我只有这个
for (int i=1; i<10; i += 4)
{
for (int j=0; j<i; j++)
{
System.out.print("*");
}
System.out.println("");
}
}
}
最简单的决定是:
for (int y = 0; y < 6; y++) {
int shift = y < 2 ? 4 / (y + 1) : 0;
for (int x = 0; x < 9 - shift; x++) System.out.print(x >= shift && (y < 4 || (x < 4 || x > 5)) ? "*" : " ");
System.out.println();
}
您可以像这样使用二维数组:
char matrice [][]= {{' ',' ',' ',' ' '*', ' ',' ',' ',' '},
{' ',' ','*','*', '*', '*','*',' ',' '}};
(等等)。你基本上使用你的数组索引来绘制你的房子。
现在,当您必须打印一个字符时,您可以使用 System.out.print() 解析每一行,并在每行之间使用 System.out.println("") 解析。
它看起来像这样:
for(char[] line : house){
for(char d : line){
System.out.print(d);
}
System.out.println("");
}
如果您不熟悉它,您应该查看for-each 语句文档。
我认为安德烈的答案是最简洁的一个,但如果你想拥有可配置的房屋建筑,你可以使用下一个(尝试改变高度/宽度以查看效果):
public class House {
public static void main(String[] args) {
final int HEIGHT = 6;
final int WIDTH = 9;
for (int i = 0; i < HEIGHT * 2; i += 2) {
for (int j = 0; j < WIDTH; j++) {// check for roof
if ((i + (i % 2) + (WIDTH) / 2) < j // right slope
|| (i + (i % 2) + j) < (WIDTH) / 2)// left slope
{
System.out.print(" ");
} else {
if ((i / 2 >= HEIGHT * 2 / 3) && (j >= WIDTH / 2) && j < WIDTH / 2 + HEIGHT / 3) {// check for door
System.out.print(" ");
} else {// solid then
System.out.print("*");
}
}
}
System.out.println();
}
}
}
编辑- 回答评论:尝试运行下两个示例并比较输出:
public static void main(String[] args) {
final int SIZE = 9;
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
System.out.print(i < j ? "+" : "-");
}
System.out.println();
}
}
和
public static void main(String[] args) {
final int SIZE = 9;
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
System.out.print(i < SIZE - j - 1 ? "+" : "-");
}
System.out.println();
}
}
第一个会给你右坡和第二个左坡。这一切都来自点的几何特性。在第一种情况下,所有点在 x 轴上的值都将大于在 y 轴上的值。在第二个中,x 和 y 总和不会超过 SIZE。
您可以尝试修改语句内部的布尔表达式if()
,看看会发生什么,但我鼓励您拿一张纸,尝试用纸和笔玩一下,看看某些点有什么属性。如果您需要更多解释,请告诉我。