Java嵌套for循环实现数字矩形:输入值向中间递减至1
解决数字矩形的代码复用问题
你当前的代码通过重复的else if分支实现层级数字,但可以通过计算当前位置到边界的最小距离来统一逻辑,彻底消除重复分支。
优化后的代码
import java.util.Scanner; public class Assign { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("Select rectangle size:"); int user = scan.nextInt(); int n = user * 2 - 1; // 矩形的边长 for (int row = 1; row <= n; row++) { for (int col = 1; col <= n; col++) { // 计算当前位置到四个边界的最小距离 int topDist = row - 1; int bottomDist = n - row; int leftDist = col - 1; int rightDist = n - col; int minDist = Math.min(Math.min(topDist, bottomDist), Math.min(leftDist, rightDist)); // 输出对应的数字,保持格式对齐 System.out.printf("%2d", user - minDist); } System.out.println(); } scan.close(); } }
核心思路解释
- 确定矩形边长:用户输入的
user对应矩形的“层数”,实际矩形边长是2*user-1(比如输入3,得到5x5的矩形)。 - 计算边界距离:对于每个坐标
(row, col),分别计算它到上、下、左、右四个边界的距离。比如第2行(row=2)到上边界的距离是1,到下边界(n=5时)的距离是5-2=3。 - 确定当前层级:取四个距离中的最小值,这个值就是当前位置所在的“层级偏移量”——最外层偏移量为0,对应数字
user;往内一层偏移量为1,对应数字user-1,以此类推直到中心偏移量为user-1,对应数字1。 - 统一输出逻辑:用
user - minDist直接得到要输出的数字,无需再写大量重复的条件分支。
额外修复点
- 你原代码中最后调用的
input.close()是错误的,应该是scan.close(),优化后的代码已经修正了这个问题。
内容的提问来源于stack exchange,提问作者JavaNewb
相关产品推荐
相关产品推荐

