我的任务是使用for循环来建造房屋。房子应该是这样的

时间:2013-02-27 08:13:26

标签: java printing geometry

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

到目前为止我只有这个

for (int i=1; i<10; i += 4)
    {

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

3 个答案:

答案 0 :(得分:2)

最简单的决定是:

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

答案 1 :(得分:0)

您可以使用这样的二维数组:

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 statement documentation

答案 2 :(得分:0)

我认为安德烈的回答是最简洁的,但是如果你想拥有可配置的住宅建筑,你可以使用下一个(尝试改变HEIGHT / WIDTH来看效果):

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()语句中的布尔表达式,看看会发生什么,但我鼓励你拿一张纸,尝试用纸和笔来看看特定点有什么属性。如果您需要更多解释,请告诉我。