java - 使用 for 循环缩放输出

标签 java math for-loop

我想做的是制作一个盒子,如下所示:

|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|

它的代码是

public static void drawUpper(int count)
{
    System.out.print("|");

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

    for(int i = 0; i <= (-count + 1); i++){
        System.out.print("/\\");
    }

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

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

    for(int i = 0; i <= (-count + 1); i++){
        System.out.print("/\\");
    }

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

    System.out.print("|");
    System.out.println();
}

public static void drawLower(int count)
{
    System.out.print("|");

    for(int i = 0; i <= -count; i++){
        System.out.print(".");
    }

    for(int i = 0; i <= (count + 1); i++){
        System.out.print("\\/");
    }

    for(int i = 0; i <= -count; i++){
        System.out.print(".");
    }

    for(int i = 0; i <= -count; i++){
        System.out.print(".");
    }

    for(int i = 0; i <= (count + 1); i++){
        System.out.print("\\/");
    }

    for(int i = 0; i <= -count; i++){
        System.out.print(".");
    }

    System.out.print("|");
    System.out.println();
}

但是,这需要一个比例,其当前比例为 5;

private static int size = 5;


public static void main(String[] args)
{
    for(int i = 1; i > (-size / 2); i--){
        drawUpper(i);
    }

    for(int i = 1; i > (-size / 2); i--){
        drawLower(i);
    }
}

现在,只要比例不改变,它就可以完美工作,我对自己很满意。然而,当我将比例更改为 7 时,该框似乎变成了这样:

|../\..../\..|
|./\/\../\/\.|
|/\/\/\/\/\/\|
|/\/\/\/\/\/\/\/\|
|\/\/\/\/\/\/|
|.\/\/..\/\/.|
|..\/....\/..|
|............|

但是,它应该看起来像这样:

|....../\............/\......|
|...../\/\........../\/\.....|
|..../\/\/\......../\/\/\....|
|.../\/\/\/\....../\/\/\/\...|
|../\/\/\/\/\..../\/\/\/\/\..|
|./\/\/\/\/\/\../\/\/\/\/\/\.|
|/\/\/\/\/\/\/\/\/\/\/\/\/\/\|
|\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
|.\/\/\/\/\/\/..\/\/\/\/\/\/.|
|..\/\/\/\/\/....\/\/\/\/\/..|
|...\/\/\/\/......\/\/\/\/...|
|....\/\/\/........\/\/\/....|
|.....\/\/..........\/\/.....|
|......\/............\/......|

最佳答案

这就是我的想法。我只提供了生产一颗钻石的代码(我不会为您完成所有工作;))。调整它来生成两颗钻石很简单,因此由您来进行这些更改(考虑到下面的代码,这实际上一点也不困难)。

// aliases for java's verbose methods
public static void p(char c) { System.out.print(c); }
public static void pn(char c) { System.out.println(c); }

// convenient shortcut for alternating between characters
public static char[] a = {'/', '\\'};

public static void dotop(int size, int line) {
    p('|');
    for (int i=0; i<size-line; i++) p('.');
    for (int i=0; i<line+1; i++) p(a[i%2]);
    for (int i=0; i<line+1; i++) p(a[(i+1+line)%2]);
    for (int i=0; i<size-line; i++) p('.');
    pn('|');
}

public static void dobottom(int size, int line) {
    p('|');
    for (int i=0; i<size-line; i++) p('.');
    for (int i=0; i<line+1; i++) p(a[(i+line+(line+1)%2)%2]);
    for (int i=0; i<line+1; i++) p(a[(i+1+(line+1)%2)%2]);
    for (int i=0; i<size-line; i++) p('.');
    pn('|');
}

public static void main(String[] args) {
    int size = 4;
    for (int i=0; i<=size; i++) dotop(size, i);
    for (int i=0; i<=size; i++) dobottom(size, size-i);
}

产生的输出是:

|..../\....|
|.../\/\...|
|../\/\/\..|
|./\/\/\/\.|
|/\/\/\/\/\|
|\/\/\/\/\/|
|.\/\/\/\/.|
|..\/\/\/..|
|...\/\/...|
|....\/....|

关于java - 使用 for 循环缩放输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22029707/

相关文章:

c - 使用函数打印二维数组

java - 为什么 Vert.x codegen 无法创建 rx-fied 类?

java - 从旧坐标和 x 和 y 计算新坐标

ios - 整数,每隔 X 数调用一次函数

C:填充矩阵

javascript - 为什么我的 for 循环末尾出现 undefined ? (Javascript)

java - Swing:将值从预定线程传回 UI

java - 多个 thenReturn 在 Mockito 中无法正常工作

java - 如何区分一个pom.xml中的不同wsdl位置-Maven

java - 特征脸的相关矩阵 - Java