如何在 java 上使用 “ | ” 和 “ _ ” 制作网格?

How can I make a grid using " | " and " _ " on java?

提问人:Daniel Mases 提问时间:11/9/2023 最后编辑:Daniel Mases 更新时间:11/11/2023 访问量:126

问:

我是 Java 的初学者,我的编程老师给了我们一个作业,我们需要用 “|” 和 “_” 制作一个由小方块组成的网格。分配

我知道这可能看起来很愚蠢,但这是我能做的最好的事情。我设法制作了列,但现在我不知道如何制作行。

package practice;

public class practice {
    
    public static void main (String[] args) {
    
    squares(4);
        
    }
    
    
    public static void squares(int number) {
        for (int i=0; i<number; i++) {
        System.out.print(" _");
        }
            System.out.println();
    
        for (int i=0; i<number; i++) {
        System.out.print("|_");
        }
            System.out.print("|");
            System.out.println();
    
    }
    
}

到目前为止,我已经学会了如何使用条件和循环,而这个作业是关于使用方法的。

Java 循环 方法 条件语句

评论

6赞 UnholySheep 11/9/2023
将您的代码作为文本发布在问题中,不要发布它的图片
1赞 Hans Kesting 11/9/2023
对于第一个顶行,暂时将 替换为 ,只是为了看看会发生什么......_=
1赞 Kaddath 11/9/2023
你的解决方案的开始很有趣,因为你在精神上分解成行并注意到这个特殊性:比网格中的数字或方块多 1 个“边界”。你似乎已经通过为顶线设置一个单独的循环来引出这个想法。第一个建议:你的函数“square”应该被称为“row”,以适应它当前的作用。另一个建议:编程中的矩形概念通常涉及 2 个嵌套循环,立方体将涉及 3 个嵌套循环,以此类推
0赞 Hans Kesting 11/9/2023
仔细检查输出。你的内侧壁是双倍的 - 想想为什么会这样?
1赞 user85421 11/10/2023
“是关于使用方法”——我能想到两种方法:1)接收列数打印一行;2)使用第一种方法接收行数和列数以打印所有行 - 最终这些方法还将接收用作边框的字符/字符串(第三种方法可能是打印每个单元格) ||顺便说一句,这个问题可以在不使用...repeat()

答:

1赞 der da 11/9/2023 #1

这应该做你想做的事。用于获取用户对行数和列数的输入。然后用一些 -loops 打印正方形。如果你关心效率,请改用,但我在这里没有使用它来保持简单。java.util.ScannerforStringBuilder

import java.util.Scanner;

public class Practice {
    public static void main(String[] args) {
        printGrid();
    }

    public static void printGrid() {
        // get input
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter rows");
        int rows = scanner.nextInt();
        System.out.println("Enter columns");
        int cols = scanner.nextInt();
        scanner.close()

        // print top line
        if (rows > 0) {
            System.out.print(" ");  // padding
            for (int i = 0; i < cols; i++) {
                System.out.print("_ ");
            }
            System.out.println();  // new line
        }
        for (int i = 0; i < rows; i++) {
            // print left line
            System.out.print("|");
            for (int j = 0; j < cols; j++) {
                System.out.print("_|");
            }
            System.out.println();  // new line
        }
    }
}

评论

1赞 Daniel Mases 11/10/2023
这很有帮助,我正在分析你使用的逻辑,在我理解之后就很清楚了。非常感谢你。
3赞 user2342558 11/9/2023 #2

我放了一些剧透,所以首先你可以尝试自己解决它。

如果你仔细观察这个,你会看到多少行?

 _ _ 
|_|_|
|_|_|

3 行,由于“标题”一行,总是多一行:_ _

其中有多少遵循相同的模式?

除了第一个之外,所有

您可以使用以下代码实现此目的:

public static void main(String[] args) {
generateSquare(2, 2);
}

private static void generateSquare(int qtyRows, int qtyCols) {
System.out.println(" ".repeat(qtyCols));

for(int x = 0; x < qtyRows; x++) {
System.out.println(“|” + ”
|".repeat(qtyCols));
}
}

请注意,在 String 对象上使用了 repeat 方法,该方法允许您在不需要循环的情况下重复该字符串。

评论

1赞 Daniel Mases 11/10/2023
这真是太神奇了。我不知道这个重复代码,也很容易理解。但是我没有在代码末尾得到那个“>!”,这是干什么用的?
0赞 user2342558 11/10/2023
@DanielMases很乐意帮助您:)(那个“>!”是一个复制粘贴错误,我删除了它,谢谢)
0赞 user2342558 11/10/2023
@DanielMases,欢迎来到 Java 编程的惊人世界;-)
0赞 user2342558 11/10/2023
@DanielMases看到我的编辑,我添加了一个方法
0赞 Daniel Mases 11/10/2023
非常感谢你。到目前为止,这很困难,但我致力于在这方面做得更好。非常感谢您的帮助:)
0赞 Reilas 11/11/2023 #3

下面是使用 StringBuilderFormatter 类的示例。

void draw(int r, int c) {
    StringBuilder s = new StringBuilder();
    Formatter f = new Formatter(s);
    f.format("%s%n", " _".repeat(c));
    for (int i = 0, j; i < r; i++) {
        for (j = 0; j < c; j++) f.format("|_");
        f.format("|%n");
    }
    f.flush();
    System.out.println(s);
}

输出

 _ _
|_|_|
|_|_|
 _ _ _ _ _ _ _ _ _ _ _ _
|_|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|_|_|