如何修改Java代码实现指定的空心数字方阵图案?
空心数字方阵代码修正方案
问题描述
需要实现特定样式的空心数字方阵,现有Java代码输出不符合预期,需调整代码达成目标效果。
当前代码
import java.util.*; public class Exercise2 { public static void main (String args[]) { Scanner scanner = new Scanner (System.in); boolean check = false; while (check != true){ System.out.println("Enter an integer between 1 and 20: "); int num = scanner.nextInt(); if (num > 0 && num <= 20){ for (int i=1; i<=num; i++){ for (int j=1; j<=num; j++){ if (i == 1 || i == num || j == 1 || j == num) { System.out.print(j + " "); } else { System.out.print(" "); // Two spaces for inner area } } System.out.println(); } check = false; } else { System.out.println("Number not between 1 and 20. Exiting."); check = true; } } } }
当前输出
1 2 3 4 5 1 5 1 5 1 5 1 2 3 4 5
期望输出
Enter an integer between 1 and 20: 5 output: 1 2 3 4 5 2 4 3 3 4 2 5 4 3 2 1
代码修正方案
当前代码的核心问题是边界数字的输出逻辑不符合预期,需针对不同边界位置调整输出内容:
- 第一行:保持从1到
num递增输出,原逻辑正确; - 最后一行:需要从
num到1递减输出,原逻辑错误; - 第一列:输出当前行号
i,原逻辑固定输出1,错误; - 最后一列:输出
num - i + 1,原逻辑固定输出num,错误; - 内部区域:保持输出两个空格,逻辑正确。
修改后的代码如下:
import java.util.*; public class Exercise2 { public static void main(String args[]) { Scanner scanner = new Scanner(System.in); boolean check = false; while (!check) { System.out.println("Enter an integer between 1 and 20: "); int num = scanner.nextInt(); if (num > 0 && num <= 20) { for (int i = 1; i <= num; i++) { for (int j = 1; j <= num; j++) { if (i == 1) { // 第一行:从1到num递增 System.out.print(j + " "); } else if (i == num) { // 最后一行:从num到1递减 System.out.print((num - j + 1) + " "); } else if (j == 1) { // 第一列:输出当前行号 System.out.print(i + " "); } else if (j == num) { // 最后一列:输出对称位置数字 System.out.print((num - i + 1) + " "); } else { // 内部区域:填充空格 System.out.print(" "); } } System.out.println(); } check = false; } else { System.out.println("Number not between 1 and 20. Exiting."); check = true; } } } }
修正后输出示例(输入5时)
Enter an integer between 1 and 20: 5 1 2 3 4 5 2 4 3 3 4 2 5 4 3 2 1
内容的提问来源于stack exchange,提问作者FL C.
相关产品推荐
相关产品推荐

