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

如何使用JavaScript在Node.js命令行中打印指定长宽的空心矩形

JavaScript 命令行打印空心矩形实现方案

问题背景

需要在Node.js环境下,通过JavaScript接收行列参数,在命令行打印空心矩形,原有代码多次调整后仍无法得到预期结果。

原有问题代码

function printRectangle(rows, cols) {
  let i, j;
  for (i = 0; i <= rows; i++) {
    for (j = 0; j <= cols; j++) {
      if (i < 2 || i === rows || j < 2 || j <= cols - 15) {
        process.stdout.write('*');
      } else {
        if (i < 2 || i === rows || j === 2 || j <= cols - 5) {
          process.stdout.write(' ');
        }
        // process.stdout.write(' ');
      }
    }
    process.stdout.write('*****\n');
  }
}

// 用户输入
let rows = 10,
  columns = 30;
printRectangle(rows, columns);

问题排查

原有代码存在三个核心错误:

  • 循环边界设置错误:i <= rows和j <= cols会导致最终输出的行列数比输入参数多1,不符合预期尺寸
  • 边框判断逻辑硬编码:写死了cols-15、cols-5这类固定数值,无法适配不同的输入尺寸,也不符合空心矩形的通用判断规则
  • 多余输出逻辑:每行遍历完成后额外输出*****,会导致所有行末尾多出多余的星号

正确实现

空心矩形的核心判断逻辑非常简单:遍历所有坐标点,只要是第一行、最后一行、第一列、最后一列的位置,就输出星号,其余位置输出空格即可。

function printRectangle(rows, cols) {
  // 遍历所有行
  for (let i = 0; i < rows; i++) {
    // 遍历当前行的所有列
    for (let j = 0; j < cols; j++) {
      // 判断是否为边框位置
      if (i === 0 || i === rows - 1 || j === 0 || j === cols - 1) {
        process.stdout.write('*');
      } else {
        process.stdout.write(' ');
      }
    }
    // 换行进入下一行
    process.stdout.write('\n');
  }
}

// 测试用例:10行30列矩形
const rows = 10;
const columns = 30;
printRectangle(rows, columns);

如果需要调整边框的粗细,比如上下2行、左右2列的粗边框,只需要修改判断条件即可:

// 粗边框判断逻辑示例
if (i < 2 || i >= rows - 2 || j < 2 || j >= cols - 2) {
  process.stdout.write('*');
} else {
  process.stdout.write(' ');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:18:04