【问题标题】:I have to write a script that receives 5 numbers from the promt and push them in the array, and thwn to display the max number我必须编写一个脚本,从提示中接收 5 个数字并将它们推送到数组中,然后显示最大数字
【发布时间】:2023-02-25 05:14:16
【问题描述】:

所以到目前为止我已经写了这篇文章,但我真的不知道我做错了什么,因为我的 maxNum 会警告未定义。

function fiveNum() {
  const arrNum = [];
  for (i = 0; i < 5; i++) {
    let ranNum = prompt("Enter number!");
    arrNum.push(ranNum);
  }
  let maxNum;
  for (i = 0; i < 5; i++) {
    let maxNum = arrNum[0];
    if (maxNum > arrNum[i])
      maxNum = arrNum[i]
  }
  alert("You`re highest number is " + maxNum);
}
fiveNum()

【问题讨论】:

  • 您需要在输入上调用parseInt()。否则,您会将它们作为字符串进行比较,而不是数字。
  • 每次通过循环,您都将 maxNum 重置为 arrNum[0]。那应该在循环之前。

标签: javascript arrays function


【解决方案1】:

您可以使用Math.max 方法。

function fiveNum() {
  const arrNum = [];
  for(let i = 0; i < 5; i++) {
    let ranNum = prompt("Enter number!");
    arrNum.push(ranNum);
  }
  let maxNum = Math.max(...arrNum);
  alert("Your highest number is " + maxNum);
}
fiveNum();

【讨论】:

    【解决方案2】:

    您需要将 let maxNum = arrNum[0] 移出循环。这有两个问题:

    1. let 声明使作用域局限于循环体,因此它不会更新在循环之前声明的变量。
    2. 您每次都将其重置为数组的第一个元素,因此您不会与之前的最大值进行比较。

      您还需要将输入转换为数字,否则您会将它们作为字符串进行比较。 "10" &lt; "2"

      而您的比较 maxNum &gt; arrNum[i] 是错误的。它应该是&lt;

      function fiveNum() {
        const arrNum = [];
        for (i = 0; i < 5; i++) {
          let ranNum = prompt("Enter number!");
          arrNum.push(Number(ranNum));
        }
        let maxNum = arrNum[0];
        for (i = 1; i < 5; i++) {
          if (maxNum < arrNum[i])
            maxNum = arrNum[i]
        }
        alert("You`re highest number is " + maxNum);
      }
      fiveNum()

    【讨论】:

      【解决方案3】:

      您的代码有两个问题:

      1. 两个 for 循环中使用的变量 i 未使用 let 或 const 关键字声明。这会导致在 global scope 中声明变量,从而导致意外行为。要解决此问题,请在两个循环中使用 let 关键字声明变量 i,如下所示:
        for (let i = 0; i < 5; i++) {
          // code here
        }
        
        1. 在您试图找到最大数量的第二个循环中,您在循环内声明了一个新变量maxNum。这将创建一个与外部 maxNum 变量同名的新变量,并且不会更新外部变量。要解决此问题,请在循环内删除 maxNum 之前的 let 关键字,如下所示:
          let maxNum = arrNum[0];
            for (let i = 0; i < 5; i++) {
              if (maxNum < arrNum[i]) {
                maxNum = arrNum[i];
              }
            }
          

          您的代码应如下所示:

          function fiveNum() {
            const arrNum = [];
            for (let i = 0; i < 5; i++) {
              let ranNum = prompt("Enter number!");
              arrNum.push(ranNum);
            }
            let maxNum = arrNum[0];
            for (let i = 0; i < 5; i++) {
              if (maxNum < arrNum[i]) {
                maxNum = arrNum[i];
              }
            }
            alert("Your highest number is " + maxNum);
          }
          fiveNum(); // this should now work
          

          我希望它有所帮助。

      【讨论】:

        猜你喜欢
        • 2021-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-29
        • 1970-01-01
        相关资源
        最近更新 更多