You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();
    }
}

核心思路解释

  1. 确定矩形边长:用户输入的user对应矩形的“层数”,实际矩形边长是2*user-1(比如输入3,得到5x5的矩形)。
  2. 计算边界距离:对于每个坐标(row, col),分别计算它到上、下、左、右四个边界的距离。比如第2行(row=2)到上边界的距离是1,到下边界(n=5时)的距离是5-2=3。
  3. 确定当前层级:取四个距离中的最小值,这个值就是当前位置所在的“层级偏移量”——最外层偏移量为0,对应数字user;往内一层偏移量为1,对应数字user-1,以此类推直到中心偏移量为user-1,对应数字1。
  4. 统一输出逻辑:用user - minDist直接得到要输出的数字,无需再写大量重复的条件分支。

额外修复点

  • 你原代码中最后调用的input.close()是错误的,应该是scan.close(),优化后的代码已经修正了这个问题。

内容的提问来源于stack exchange,提问作者JavaNewb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:40:49