java - 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
*************
*..*..*..*..*
*..*..*..*..*
*************
*..*..*..*..*
*..*..*..*..*
*************
*..*..*..*..*
*..*..*..*..*
*************
*..*..*..*..*
*..*..*..*..*
*************
我不知道该怎么做,当我尝试使用第一种方法作为帮助方法时,我得到了一个凌乱的模式..
解决方案
如果您考虑一下, a*
始终用于范围从到3*i
的行中的第 th 个元素。列的情况类似:它始终是 col 中的第 th 元素,范围从到。所有其他元素都是s。i
0
a*3
3*j
j
0
b*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);
}
}
推荐阅读
- javascript - 如何使用 React Native 用文本标记图像点?
- asp.net-core - 使用 aspnetboilerplate 配置 swagger 时出现问题
- excel - Excel/VBA/SQL 从一行中获取值并在另一行中更新
- java - Hbase FilterList as MUST_PASS_ONE 与两个 RowFilters 返回所有内容
- three.js - 使用 Mali GPU 的 Three.js 中对象的奇怪抖动
- regex - URL 匹配正则表达式:正面和负面术语
- java - Java SocketChannel 无法向 ServerSocketChannel 发送数据
- java - 动画运行不流畅(旋转)
- c# - 将数据表与公式绑定时的 C# ReoGrid 性能问题
- javascript - 数组丢失内容javascript