图案打印程序 - 无法倒序打印镜像部分
Pattern-printing program - Unable to print the mirrored part in reverse order
我正在尝试创建一个图案打印程序。
我无法以相反的顺序打印我的图案。我知道第二个 for
循环中存在一些逻辑错误,但我无法识别它。
public class test {
public static void main(String[] args) {
int num = 7;
int temp1 = 1;
int temp2 = 1;
for (int i = 1; i <= num / 2; i++) {
for (int j = 1; j <= num - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= temp1; k++) {
System.out.print(Math.abs(k - temp2));
}
temp1 += 2;
temp2++;
System.out.println();
}
temp1 = 1;
temp2 = 1;
for (int i = num - (num / 2); i >= 1; i--) {
for (int j = 1; j <= num - i; j++) {
System.out.print(" ");
}
for (int k = temp1; k >= 1; k--) {
System.out.print(Math.abs(k - temp2));
}
temp1 += 2;
temp2++;
System.out.println();
}
}
}
程序输出:
0
101
21012
0
101
21012
3210123
预期输出:
0
101
21012
3210123
21012
101
0
因为你需要打印的图形由三部分组成,所以你必须将你的解决方案分解成三个不同的方法。所以测试它们会更容易。
的top和bottom很相似。您可以采取的最简单的方法是对 底部部分 重复使用相同的代码,仅进行一项更改:外部 for
的索引正在用最大值初始化,并将得到在迭代的每一步递减(你做对了,但你也改变了内部 for
循环,因为你的第一个循环块也负责打印中间部分 ).
public static void print(int size) {
printTopPart(size);
if (size % 2 == 1) { // middle part will be printed if size is odd
printMiddlePart(size);
}
printBottomPart(size);
}
public static void printTopPart(int size) {
int height = size / 2;
for (int row = 0; row < height; row++) {
// print the white space
for (int i = 0; i < height - row; i++) {
System.out.print(" ");
}
// print the row of numbers
for (int i = 0; i < row * 2 + 1; i++) {
System.out.print(Math.abs(row - i));
}
System.out.println(); // advance the output to the next row
}
}
public static void printMiddlePart(int size) {
// print the row of numbers
for (int i = 0; i < size; i++) {
System.out.print(Math.abs(size / 2 - i));
}
System.out.println(); // advance the output to the next row
}
public static void printBottomPart(int size) {
int height = size / 2;
for (int row = height - 1; row >= 0; row--) {
// print the white space
for (int i = 0; i < height - row; i++) {
System.out.print(" ");
}
// print the row of numbers
for (int i = 0; i < row * 2 + 1; i++) {
System.out.print(Math.abs(row - i));
}
System.out.println(); // advance the output to the next row
}
}
main()
- 演示
public static void main(String[] args) {
print(7);
}
输出
0
101
21012
3210123
21012
101
0
我正在尝试创建一个图案打印程序。
我无法以相反的顺序打印我的图案。我知道第二个 for
循环中存在一些逻辑错误,但我无法识别它。
public class test {
public static void main(String[] args) {
int num = 7;
int temp1 = 1;
int temp2 = 1;
for (int i = 1; i <= num / 2; i++) {
for (int j = 1; j <= num - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= temp1; k++) {
System.out.print(Math.abs(k - temp2));
}
temp1 += 2;
temp2++;
System.out.println();
}
temp1 = 1;
temp2 = 1;
for (int i = num - (num / 2); i >= 1; i--) {
for (int j = 1; j <= num - i; j++) {
System.out.print(" ");
}
for (int k = temp1; k >= 1; k--) {
System.out.print(Math.abs(k - temp2));
}
temp1 += 2;
temp2++;
System.out.println();
}
}
}
程序输出:
0
101
21012
0
101
21012
3210123
预期输出:
0
101
21012
3210123
21012
101
0
因为你需要打印的图形由三部分组成,所以你必须将你的解决方案分解成三个不同的方法。所以测试它们会更容易。
的top和bottom很相似。您可以采取的最简单的方法是对 底部部分 重复使用相同的代码,仅进行一项更改:外部 for
的索引正在用最大值初始化,并将得到在迭代的每一步递减(你做对了,但你也改变了内部 for
循环,因为你的第一个循环块也负责打印中间部分 ).
public static void print(int size) {
printTopPart(size);
if (size % 2 == 1) { // middle part will be printed if size is odd
printMiddlePart(size);
}
printBottomPart(size);
}
public static void printTopPart(int size) {
int height = size / 2;
for (int row = 0; row < height; row++) {
// print the white space
for (int i = 0; i < height - row; i++) {
System.out.print(" ");
}
// print the row of numbers
for (int i = 0; i < row * 2 + 1; i++) {
System.out.print(Math.abs(row - i));
}
System.out.println(); // advance the output to the next row
}
}
public static void printMiddlePart(int size) {
// print the row of numbers
for (int i = 0; i < size; i++) {
System.out.print(Math.abs(size / 2 - i));
}
System.out.println(); // advance the output to the next row
}
public static void printBottomPart(int size) {
int height = size / 2;
for (int row = height - 1; row >= 0; row--) {
// print the white space
for (int i = 0; i < height - row; i++) {
System.out.print(" ");
}
// print the row of numbers
for (int i = 0; i < row * 2 + 1; i++) {
System.out.print(Math.abs(row - i));
}
System.out.println(); // advance the output to the next row
}
}
main()
- 演示
public static void main(String[] args) {
print(7);
}
输出
0
101
21012
3210123
21012
101
0