【问题标题】:Making a box challenge -Edabit (for loop returns wrong output.)进行盒子挑战-Edabit(for循环返回错误的输出。)
【发布时间】:2021-08-21 08:16:15
【问题描述】:

我正在尝试在 edabit 上解决 This question。但是我的代码返回错误的输出。

我的代码:

function charBox(s) {
    if(s % 1 !== 0 || s < 0 || typeof(s) === "string") return -1;
    let charArr = "#".repeat(s).split("");
    let res = [charArr];
    for(let i = 1; i < s; i++) res.push(res[0])
    
    if(res.length > 2) {
        for(let j = 1; j < res.length -1; j++)
            for(let k = 1; k < (res[j].length - 1); k++)
                res[j][k] = " ";
        return res;
    } 
    else return res;
}

预期输出:如果输入 = 4

charBox(4) ➞ [
  ["#", "#", "#", "#"],
  ["#", " ", " ", "#"],
  ["#", " ", " ", "#"],
  ["#", "#", "#", "#"]
]

我的输出:如果输入 = 4

charBox(4) ➞ [
  ["#", " ", " ", "#"],
  ["#", " ", " ", "#"],
  ["#", " ", " ", "#"],
  ["#", " ", " ", "#"]
]

Here's Fiddle 如果您想尝试一下。 拜托,谁能解释一下我怎么这么笨。

【问题讨论】:

    标签: javascript arrays for-loop


    【解决方案1】:

    您可以使用 2 个 for 循环。检查当前坐标是否来自边界项。边界条件是:i, j, n-i-1, n-j-1 至少有一个应该为零。

    function box(n) {
      const output = []
      
      for (let i = 0; i < n; i++) {
        const inner = []
        for (let j = 0; j < n; j++) {
          if ( [i, j, n-i-1, n-j-1].includes(0) )
            inner.push("#")
          else
            inner.push(" ")
        }
        output.push(inner)
      }
      
      return output
    }
    
    console.log(
      box(4)
    )

    您也可以像这样使用嵌套的Array.from()

    const box = n => Array.from({ length: n }, (_, i) =>
      Array.from({ length: n }, (_, j) => 
        [i, j, n-i-1, n-j-1].includes(0) ? "#" : " ")
    )
    
    console.log(box(4))

    【讨论】:

    • 感谢您,您的解决方案很棒!但是,我仍然不明白为什么我的 for 循环失败......即使我的索引设置为从“1”开始并在倒数第二个元素结束,它也会更改数组中的每个元素。知道为什么会这样吗?
    • @bunee 您将charArr 的相同数组引用推送到所有索引。如果更改其中一个数组,它会影响所有内部数组。更改您的代码以使用slice 添加charArr 的副本。更改代码:let res = []; for(let i = 0; i &lt; s; i++) res.push(charArr.slice())
    • 我在这里,认为我的 for 循环坏了 XD。谢谢!这更有意义。作为我自己的乌杜皮人,我尊重你!快乐编码:)
    猜你喜欢
    • 1970-01-01
    • 2022-08-13
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多