首页 > 解决方案 > java中的图案打印问题:由符号'.'组成的“框架” 和“*”,尺寸 AxB

问题描述

编写一个程序,读取自然数 a 和 b 并打印一个由符号 '.' 组成的“帧”。和 '*' 尺寸 axb 如下(点在里面,点周围有星星):

a=4,b=4;  a=3,b=1
****     *
*..*     *
*..*     *
****

我是这样解决的:

static void first(int a, int b) {
    for(int i=1; i<=a; i++) {
        for(int j=1; j<=b;j++) {
            if (i==1 || i==a || j==1 || j==b)
                System.out.print("*");
            else System.out.print(".");
        }
        System.out.println();
    }
}

下一个任务有点不同,下面是给定 a 和 b 的程序应该返回的内容:

a=3,b=1     
**** 
*..*
*..*
****
*..*
*..*
****
*..*
*..*
****


a=4,b=4
*************
*..*..*..*..*
*..*..*..*..*
*************
*..*..*..*..*
*..*..*..*..*
*************
*..*..*..*..*
*..*..*..*..*
*************
*..*..*..*..*
*..*..*..*..*
*************

我不知道该怎么做,当我尝试使用第一种方法作为帮助方法时,我得到了一个凌乱的模式..

标签: java

解决方案


如果您考虑一下, a*始终用于范围从到3*i的行中的第 th 个元素。列的情况类似:它始终是 col 中的第 th 元素,范围从到。所有其他元素都是s。i0a*33*jj0b*j.

您可以简单地使用模运算 ( %) 来表示此结构:

class Main {
    
    static void print(int a, int b) {
        for (int row = 0; row <= a*3; row++) {
            for (int col = 0; col <= b*3; col++) {
                if (row % 3 == 0) {
                    System.out.print("*");
                }
                else if (col % 3 == 0) {
                    System.out.print("*");
                }
                else {
                    System.out.print(".");
                }
            }
            System.out.print("\n");
        }
    }
    
    
    public static void main(String args[]) {
        print(3, 1);
        print(4, 4);
    }
}


推荐阅读