3

我正在尝试编写一个 javascript 程序,该程序将显示用户输入的 10 个数字中最大的一个。这是我到目前为止但没有工作的。

<html>
    <head></head>
    <body>
    <script type="text/javascript">
         var counter=1;
         var number= new Array;
         number.length=9;
         var largest=0;

        while (counter <= 10)  {
            number=window.prompt("Enter Numbers 1-10 Number:"+counter+".");
                number[counter]= parseInt(number);
            counter++;
        }
        largest=Math.max.apply(Array);  
        document.writeln("<h1>Largest number is " +largest+ "</h1>");
</script>
</body>
</html>
4

5 回答 5

2

您只是缺少预期thisArg的 for Function.prototype.apply

正如 MDN 所描述的Syntax

fun.apply(thisArg[, argsArray])

如这个简单的例子所示

Math.max.apply (null,[5,4,3,7,9,]) //9
                ^^^^

为简单起见,示例中使用了where null,因为 Math 不需要特定的上下文

您要做的是将数组传递numberMath.max,然后将其作为thisArg (尽管您似乎将其误认为是Array,这将导致以零参数调用任何一种方式Math.max根据§15.8.2.11产生

给定零个或多个参数,对每个参数调用 ToNumber 并返回结果值中的最大值。

  • 如果没有给出参数,则结果为 -∞。
于 2013-10-11T16:20:23.077 回答
1

几个问题,

  • 数组索引为 0。您通过从 0 开始计数器跳过了 0 索引,这将搞砸数组计算。(如果您使用 Math.max.apply(array, number) 它将在没有 0 索引的情况下工作)。
  • 您在每次提示时都覆盖了 number 变量,要么使用 window.prompt 将其输入到 parseInt 中,要么将其输入到一个临时变量中。
  • 您对 apply 变量的语法不正确。

尝试这个:

var counter=0;
 var number= new Array;
 number.length=9;
var newnumber;
 var largest=0;




while (counter <= 10)
{

    newnumber=window.prompt("Enter Numbers 1-10 Number:"+counter+".");
    number[counter]= parseInt(newnumber);

    counter++;
}
largest=Math.max.apply(Math, number);  
document.writeln("<h1>Largest number is " +largest+ "</h1>");
于 2013-10-11T16:25:31.447 回答
1
  1. 您正在将数组与 temp 变量混合以保存输入。
  2. apply接受两个参数,上下文(在这种情况下不相关)和参数数组。

应该是这样的:

var arr = [];
while (counter <= 10)
{

    number=window.prompt("Enter Numbers 1-10 Number:"+counter+".");
    arr[counter]= parseInt(number);

    counter++;
}

largest=Math.max.apply(Array, arr);  

(小提琴)

于 2013-10-11T16:20:36.337 回答
0
<html>
<head>
</head>
<body>
<script type="text/javascript">
var counter=1;
var number= [];

var largest=0;

while (counter <= 10){

number.push(Number(window.prompt("Enter Numbers 1-10 Number:"+counter+"."),10));

counter++;
}

Array.prototype.max = function () {
    return Math.max.apply(Math, this);
};


largest = number.max();
document.writeln("<h1>Largest number is " +largest+ "</h1>");


</script>
</body>
</html>
于 2013-10-11T16:30:37.060 回答
0

您的代码的主要问题是:

  1. 您缺少函数调用中的this参数Math.max.apply
  2. number每次从用户那里读取新值时,您都会破坏数组。您需要一个单独的变量用于用户输入。

但是,您根本不需要为此任务构建数组。在循环内部,只需largest与用户刚刚提供的数字进行比较,并largest在适当时更新:

</head>
<body>
<script type="text/javascript">
 var counter;
 var number;
 var largest=Number.NEGATIVE_INFINITY;

 for (counter = 1; counter <= 10; counter++)
 {

    number = window.prompt("Enter Numbers 1-10 Number:"+counter+".");
    number = parseInt(number);
    if (number > largest) {
        largest = number;
    }
}
document.writeln("<h1>Largest number is " +largest+ "</h1>");


</script>
</body>
</html>
于 2013-10-11T16:33:37.003 回答