首页 > 解决方案 > 打印棋盘格或方形图案

问题描述

我正在学习 Java,目前正在尝试使用该程序制作一些 ASCII 艺术作品。我能够制作一个空心钻石,但我正在努力创建一个“棋盘”或方形图案。我正在尝试创建如下所示的内容:

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

由于某种原因,它不断出现这样的情况:

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

我知道问题出在我的 for 循环上。由于我刚刚了解了嵌套循环,因此我仍在尝试理解其中的逻辑。我的中间循环控制空间,无论我为s(我的递增变量)设置什么值,它仍然使模式变得奇怪。

这是我的代码:

public class ASCII_Art {
    public static void squares() {
        System.out.println("***\n***   ");
    }

    public static void main(String[] args) {
        for (int i = 0; i <= 5; i++) {
            for (int y = 0; y < i - 4; y++) {
                squares();
                System.out.print("   ");
                squares();
            }
        }
    }
}

我做了一个方形方法,因为我读到这些方法使一切变得更清晰、更容易,因为您不必多次重写相同的代码。

标签: javafor-loopascii-art

解决方案


这里有几个问题。

  1. 正如其他人指出的那样,\n创建一条新线,
    就像这样。\t另一方面,创建一个缩进, 就像这样。为了你的目的,\t就是你想要的。

  2. 在您的squares函数中,您只打印两个***s。而是打印 3。

  3. 由于squares已经打印了一行,因此您只需要一个最多为 2 的 for 循环。执行此操作的常规方法是int i = 0; i < 2.

下面是完整的更正代码(我修复了缩进,重新括起来并添加了一个main方法):

public class ASCII_Art
{   
    public static void squares(){
        System.out.println("***\t***\t***");
    }

    public static void main(String[] args) {
        for (int i = 0; i < 2; i++) {
            squares();
        }
    }
}

或者,由于您的squares方法实际上并没有提供太多价值,您可以这样做:

public class ASCII_Art
{   
    public static void main(String[] args) {
        for (int i = 0; i < 2; i++) {
            System.out.println("***\t***\t***");
        }
    }
}

如果你想进一步定制你的 ASCII 艺术,你可以制作一个带有 3 个参数的函数:一个用于*s 的数量,一个用于一行中的星号块数,一个用于行数。我会让你自己弄清楚...


推荐阅读