试图建造一座建筑物

时间:2014-02-24 04:43:35

标签: java

我应该在哪里使用print和println语句在控制台窗口上绘制建筑物。假设建筑物的高度为2,那么它应该显示两层楼高,如下图所示。

输出

enter image description here

嗯,它看起来像是嵌套循环。我认为最外层的循环应该是故事的数量。在那个循环中有另一个窗口数量的循环,而另一个循环有多高,然后在里面,有多宽。 有谁能请举个例子怎么做?我知道我必须使用for循环。

import java.util.Scanner;
public class BuildingAssign {

    public static void main (String [] args){

        int input;  
        int stories;
        int windows;
        int wide;
        int tall;
        final int MAXSTORIESHIGH= 4;
        final int MINSTORIESHIGH = 1;
        final int MAXWINDOWS = 16;
        final int MINWINDOWS = 2;
        final int MAXWIDE = 4;
        final int MINWINDE = 3;
        final int MAXTALL = 4;
        final int MINTALL =3 ;

        Scanner in = new Scanner(System.in);

        do {
            System.out.print("How many stories high the building will be? (1-4): ");
            stories = in.nextInt();
        }while (stories < MINSTORIESHIGH || stories > MAXSTORIESHIGH);

        do {
            System.out.print("How many windows on each story? (2-16): ");
            windows = in.nextInt();
        }while (windows < MINWINDOWS || windows > MAXWINDOWS);

        if (stories < 2){
            System.out.print("It won't work");

        }

        do {
            System.out.print("How wide each window will be? (3-4): ");
            wide = in.nextInt();
        }while (wide < MINWINDE || wide > MAXWIDE);

        do {
            System.out.print("How tall each window will be? (3-4): ");
            tall = in.nextInt();
        }while (tall < MINTALL || tall > MAXTALL);

        for (; stories == 1; stories++){
            System.out.println("***********\n*         *\n*         *\n*         *\n*         *\n*         *\n***********");
            System.exit(0);
        }
        for (; stories == 2; stories++){
            System.out.println("***********\n*         *\n*         *\n*         *\n*         *\n*         *\n***********         \n*         *\n*         *\n*         *\n*         *\n*         *\n***********");
            System.exit(0);
        }
        for (; stories == 3; stories++){
            System.out.println("***********\n*         *\n*         *\n*         *\n*         *\n*         *\n***********         \n*         *\n*         *\n*         *\n*         *\n*         *\n***********         \n*         *\n*         *\n*         *\n*         *\n*         *\n***********");
            System.exit(0);
        }
        for (; stories == 4; stories++){
            System.out.println("***********\n*         *\n*         *\n*         *\n*         *\n*         *\n***********         \n*         *\n*         *\n*         *\n*         *\n*         *\n***********         \n*         *\n*         *\n*         *\n*         *\n*         *\n***********         \n*         *\n*         *\n*         *\n*         *\n*         *\n***********");
            System.exit(0);     
        }
    }
}

1 个答案:

答案 0 :(得分:0)

好的,当前循环,System.out.println语句和这些System.exit语句并不完全正确......

您必须考虑不能绘制单个窗口,然后在第一个窗口的左侧或右侧绘制一个窗口。当您打印类似

的内容时
****
*  *
*  * 
****
然后你就可以继续打印像

这样的东西了
****
*  *
*  * 
****  ****
      *  *
      *  * 
      ****

左右,这不是你想要的。您还必须根据窗户的宽度和数量以及每个故事的高度(基于窗户的高度)了解整个建筑的宽度。

也许这个伪(*)代码提供了一个基本的想法:

for (int s=0; s<stories; s++)
{
    printTopRowOfStory(totalBuildingWidth);        // ***********
    printWalls(totalBuildingWidth);                // *         *
    printWindowBorders(windows, wide);             // * *** *** *
    for (int h=0; h<tall; h++)          
    {                                              
        printInnerWindowBorders(windows, wide);    // * * * * * *
    }
    printWindowBorders(windows, wide);             // * *** *** *
    printWalls(totalBuildingWidth);                // *         *
}
printFloor(totalBuildingWidth);                    // ***********

(*)它不是真正的伪代码。你真的可以像这样实现它。特别是,每个与窗口相关的方法都将包含另一个for - 循环。