Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Java绘制ASCII楼梯?_Java_For Loop_Ascii_Draw_Ascii Art - Fatal编程技术网

如何用Java绘制ASCII楼梯?

如何用Java绘制ASCII楼梯?,java,for-loop,ascii,draw,ascii-art,Java,For Loop,Ascii,Draw,Ascii Art,我一直在努力用Java完成这项工作。这是一件复杂的事情,至少对我来说 Q1编写一个简单的Java程序,打印楼梯或图形,如下所示: +---+ | | +---+---+ | | | +---+---+---+ | | | | +---+---+---+---+ | | | | | +---+---+

我一直在努力用Java完成这项工作。这是一件复杂的事情,至少对我来说

Q1编写一个简单的Java程序,打印楼梯或图形,如下所示:

                +---+
                |   |
            +---+---+
            |   |   |
        +---+---+---+
        |   |   |   |
    +---+---+---+---+
    |   |   |   |   |
+---+---+---+---+---+
|   |   |   |   |   |
+---+---+---+---+---+
我已经想出了一个解决办法,但还不到一半。这就是我想出的代码

公共类楼梯{
公共静态最终内部高度=5;
公共静态最终整数总高度=高度*5;
公共静态void main(字符串[]args){
//主外环
对于(int i=1;i
公共级楼梯{
//您可以将高度更改为任意数字并进行检查
公共静态最终内部高度=5;
公共静态void main(字符串[]args){
楼梯=新楼梯();
对于(int j=0;j对于(int k=0;k这是我对这个问题的解决方案。谢谢你的拼图;)

公共级楼梯{
公共静态最终整数大小=5;
公共静态最终内部楼梯宽度=5;
公共静态最终字符串踏步=“-”;
公共静态最终管柱提升管=“|”;
公共静态最终字符串NOSING=“+”;
公共静态最终字符串为空=”;
公共静态void main(字符串[]args)
{
StringBuilder步骤=新建StringBuilder();
对于(inti=0;i<(楼梯宽度-2);+i){step.append(踏板);}
StringBuilder hollow=新的StringBuilder();
对于(inti=0;i<(楼梯宽度-2);++i{hollow.append(hollow);}
StringBuilder踏板=新StringBuilder();
对于(inti=0;i
还有另一个答案,因此您可以看到解决此问题的多种方法。此方法使用单个绘制循环,并避免使用常量:

public static void drawStaircase(int steps, 
      String stepTop, String stepLeft, String stepEmpty) {
    String endOfTopStep = stepTop.substring(0,1);  // "+---" => "+"
    String endOfMidStep = stepLeft.substring(0,1); // "|---" => "|"
    for (int row=0; row<steps;row++) {
        // paint a top-of-step row
        for (int col=0; col<steps; col++) {
            boolean isEmpty = row+col+1 < steps;
            System.out.print(isEmpty ? stepEmpty : stepTop);
        }
        System.out.println(endOfTopStep);
        
        // paint a middle-of-step row
        for (int col=0; col<steps; col++) {
            boolean isEmpty = row+col+1 < steps;
            System.out.print(isEmpty ? stepEmpty : stepLeft);
        }
        System.out.println(endOfMidStep);
    }
    // paint bottom border
    for (int col=0; col<steps; col++) {
        System.out.print(stepTop);
    }
    System.out.println(endOfTopStep);
}

public static void main(String ...args) {
    drawStaircase(4, "+---", "|   ", "    ");
}
公共静态楼梯(内部台阶,
字符串stepTop、字符串stepLeft、字符串stepEmpty){
字符串endOfTopStep=stepTop.substring(0,1);/“+--”=>“+”
字符串endOfMidStep=stepLeft.substring(0,1);/“|--”=>“|”

对于(int row=0;row,我创建了这段代码来说明如何处理一个问题,并将其一步一步地分解,直到可以解决每一步为止

以下是我的众多测试结果之一的结果

                +---+
                |   |
            +---+---+
            |   |   |
        +---+---+---+
        |   |   |   |
    +---+---+---+---+
    |   |   |   |   |
+---+---+---+---+---+
|   |   |   |   |   |
+---+---+---+---+---+
我做的第一件事是创建一个生成空白线段的方法。我使用该类使构建线段和连接线段变得更容易

一旦我开始工作,我就创建了创建台阶(平台)和托梁的方法

接下来,我创建了一个方法来创建一行输出

最后,我创建了一个方法来创建整个楼梯

这是完整的可运行代码。它可能不是最有效的代码,但我希望它是最容易理解的代码之一

public class Staircase {

    public static void main(String[] args) {
        Staircase sc = new Staircase();
        System.out.println(sc.createStaircase(5));
    }

    public String createStaircase(int steps) {
        StringBuilder builder = new StringBuilder();
        int blankSteps = 0;
        String step = createStepSegment();
        String joist = createJoistSegment();

        for (int i = 1; i <= steps; i++) {
            blankSteps = Math.max(0, steps - i);
            builder.append(createLine(step, steps, blankSteps));
            builder.append(createLine(joist, steps, blankSteps));
        }
        builder.append(createLine(step, steps, blankSteps));

        return builder.toString();
    }

    private StringBuilder createLine(String string, int steps, int blankSteps) {
        StringBuilder builder = new StringBuilder();

        int width = string.length() * blankSteps;
        builder.append(createBlankSegment(width));

        int boxSteps = steps - blankSteps;
        for (int i = 0; i < boxSteps; i++) {
            builder.append(string);
        }

        builder.append(string.charAt(0));
        builder.append(System.lineSeparator());

        return builder;
    }

    private String createStepSegment() {
        return "+---";
    }

    private String createJoistSegment() {
        return "|   ";
    }

    private StringBuilder createBlankSegment(int length) {
        StringBuilder builder = new StringBuilder();

        for (int i = 0; i < length; i++) {
            builder.append(" ");
        }

        return builder;
    }

}
公共级楼梯{
公共静态void main(字符串[]args){
楼梯sc=新楼梯();
系统输出打印LN(sc.5);
}
公共字符串(整数步){
StringBuilder=新的StringBuilder();
int blankSteps=0;
字符串步骤=createStepSegment();
弦托梁=createJoistSegment();

对于(int i=1;i您可以使用
streams
建造楼梯:

intm=5;
字符串[]arr=IntStream.range(0,m).mapToObj(i->{
字符串[]arr1=新字符串[m];
字符串[]arr2=新字符串[m];
字符串[]arr3=新字符串[m];
IntStream.range(0,m).forEach(j->{
如果(i+j>=m-1){
如果(j==m-1){
arr1[j]=“+--+”;
arr2[j]=“||”;
arr3[j]=“+--+”;
}否则{
arr1[j]=“+--”;
arr2[j]=“|”;
arr3[j]=“+--”;
}
}否则{
arr1[j]=“”;
arr2[j]=“”;
}
});
如果(i==m-1){
返回流。of(arr1、arr2、arr3);
}否则{
返回流。of(arr1,arr2);
}
}).flatMap(函数.identity())
.map(行->字符串.join(“,行))
.toArray(字符串[]::新建);
//输出
Arrays.stream(arr.forEach)(System.out::println);

可以将楼梯表示为0和1的二维数组,如下所示:

[0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 1, 1]
[0, 0, 0, 1, 1, 1]
[0, 0, 1, 1, 1, 1]
[0, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1]
然后,您可以将此数组的非空单元格表示为几乎正方形,由两行组成:一行带上边框,一行带左边框。空单元格只是两行长度相同的空格

+---
|   
然后,您可以将每行的单元格连接成一行,并逐行输出。结果由两部分组成:具有右边框的二维数组的行和具有下边框的行:

int n=6;
//二维零和一数组
int[][]字段=IntStream.range(0,n)
.mapToObj(i->IntStream.range(0,n)
.map(j->i+jpublic class Staircase {

    public static void main(String[] args) {
        Staircase sc = new Staircase();
        System.out.println(sc.createStaircase(5));
    }

    public String createStaircase(int steps) {
        StringBuilder builder = new StringBuilder();
        int blankSteps = 0;
        String step = createStepSegment();
        String joist = createJoistSegment();

        for (int i = 1; i <= steps; i++) {
            blankSteps = Math.max(0, steps - i);
            builder.append(createLine(step, steps, blankSteps));
            builder.append(createLine(joist, steps, blankSteps));
        }
        builder.append(createLine(step, steps, blankSteps));

        return builder.toString();
    }

    private StringBuilder createLine(String string, int steps, int blankSteps) {
        StringBuilder builder = new StringBuilder();

        int width = string.length() * blankSteps;
        builder.append(createBlankSegment(width));

        int boxSteps = steps - blankSteps;
        for (int i = 0; i < boxSteps; i++) {
            builder.append(string);
        }

        builder.append(string.charAt(0));
        builder.append(System.lineSeparator());

        return builder;
    }

    private String createStepSegment() {
        return "+---";
    }

    private String createJoistSegment() {
        return "|   ";
    }

    private StringBuilder createBlankSegment(int length) {
        StringBuilder builder = new StringBuilder();

        for (int i = 0; i < length; i++) {
            builder.append(" ");
        }

        return builder;
    }

}
                +---+
                |   |
            +---+---+
            |   |   |
        +---+---+---+
        |   |   |   |
    +---+---+---+---+
    |   |   |   |   |
+---+---+---+---+---+
|   |   |   |   |   |
+---+---+---+---+---+
[0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 1, 1]
[0, 0, 0, 1, 1, 1]
[0, 0, 1, 1, 1, 1]
[0, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1]
+---
|   
n=6
                    +---+
                    |   |
                +---+---+
                |   |   |
            +---+---+---+
            |   |   |   |
        +---+---+---+---+
        |   |   |   |   |
    +---+---+---+---+---+
    |   |   |   |   |   |
+---+---+---+---+---+---+
|   |   |   |   |   |   |
+---+---+---+---+---+---+