1

我的朋友让我帮他做作业,我被困住了。这是任务:

用户必须在第一个提示框中输入数组中元素的数量。然后,他会得到每个数字输入的提示框。现在,输出必须是数组中的最大数。但这根本行不通。使用下面的代码,我总是得到第一位数字最大的元素。(数字是负数还是正数都没有关系,代码不能正常工作)

这是我的代码(它甚至在 jsfiddle 中不起作用,只是在我的文件中)

<button onclick="duzinaNiza()">Do it!</button>

这是JavaScript

function duzinaNiza() {
    var brClanova = prompt("Enter the number of array elements:");

    if (brClanova > 0) {
        var niz = new Array();

        for (i=0; i<brClanova; i++) {
            var redniBr = i+1;
            niz[i] = prompt("Enter "+ redniBr +". array number:");
            \\ prompt for geting each array element
        }


        var maximum = niz[0];

        for (a=0; a<brClanova; a++) {

            if (maximum < niz[a]) {
                maximum = niz[a];
            }
        }

        document.write("Greatest value in array is: " + maximum);   
    }
}

我朋友的教授不想使用函数对数组进行排序,这必须通过循环来完成。

PS是的,我知道...但是不要问有关document.write的东西,它必须以那种方式打印...

4

7 回答 7

1

那是因为输入是一个字符串,你必须将它解析为一个整数。像:

niz[i] = parseInt(prompt("Enter "+ redniBr +". array number:"), 10);
于 2013-04-12T18:58:58.133 回答
1

试试这个:

function duzinaNiza() {
    var brClanova = prompt("Enter the number of array elements:");

    if (brClanova > 0) {
        var niz = new Array();

        for (i=0; i<brClanova; i++) {
            var redniBr = i+1;
            niz[i] = parseInt(prompt("Enter "+ redniBr +". array number:"));
            // prompt for geting each array element
        }


        var maximum = niz[0];

        for (a=0; a<brClanova; a++) {

            if (maximum < niz[a]) {
                maximum = niz[a];
            }
        }

        document.write("Greatest value in array is: " + maximum);   
    }
}
于 2013-04-12T19:08:12.580 回答
1

试试这个,[提示:我刚刚使用了'+' operator将值转换为number(来自prompt. 的值)。如果输入的值无法转换为数字,'+' operator则将返回。NaN所以在那种情况下,你应该使用isNan函数来摆脱它。]

  duzinaNiza = function () {
    var brClanova = prompt("Enter the number of array elements:");

    if (brClanova > 0) {
        var niz = new Array();
        var maximum;

        for (i=0; i<brClanova; i++) {
            var temp = +prompt("Enter "+ i+1 +". number:");
            if(i===0) { maximum = temp }
            else { maximum = (temp > maximum)?temp:maximum; }

        }

        alert("Greatest value in array is: " + maximum);   
    }
}
于 2013-04-12T19:13:23.930 回答
1

问题是当您想比较两个数字时,您正在比较两个字符串。换句话说,以下表达式在 javascript 中是合法的,并且计算结果为 true:

if('4' > '393939393'){
    //true! string '4' is greater than string '3' (first char of '393939393')
}

您应该做的是转换从函数提示符收到的值,因此它被视为一个数字。您可以使用以下函数执行此操作:

parseInt(prompt("Enter "+ redniBr +". array number:"), 10);

第一个参数是要转换为数字的值,而第二个参数是数字的基数(或“基数”)。

于 2013-04-12T19:17:42.940 回答
1

所以,这里的主要问题是你不是威胁你的数字作为“数字”,而是作为字符串。该方法prompt返回一个字符串,因此您需要将它们转换:

 function duzinaNiza() {
    var brClanova = +prompt("Enter the number of array elements:");

    if (!brClanova)
      return;

    var niz = [];

    for (var i=0; i < brClanova; i++) {
        var redniBr = i + 1;
        niz[i] = +prompt("Enter "+ redniBr + ". array number:");
    }

    var max = niz[0]; 

    for (var a = 1; a < brClanova; a++) {

      if (max < niz[a])
         max = niz[a];

    }

    document.write("Greatest value in array is: " + max);
}

为此,我使用了一元加运算符

只是要知道,在 JS 中,您实际上可以避免使用最后一个循环Math.max来获取数字数组的最大值。所以而不是:

    var max = niz[0]; 

    for (var a = 1; a < brClanova; a++) {

      if (max < niz[a])
         max = niz[a];

    }

    document.write("Greatest value in array is: " + max);

你将会有:

    var max = Math.max.apply(null, niz);

    document.write("Greatest value in array is: " + max);

在这种情况下,您甚至不需要一元加号运算符,因为Math.max它会照顾到这一点。

于 2013-04-12T19:18:29.660 回答
1

您不需要 parseInt- 如果您减去可以转换为数字的字符串,它们就会被转换。所以你可以从下一个数字中减去最大值,看看它是否留下了余数。

另外,parseInt 会破坏小数,所以你不会知道 1.5 大于 1。

您的评论使用了错误的字符 - `('\' 应该是 '//')

function duzinaNiza(){
    var brClanova= prompt("Enter the number of array elements:");
    if(brClanova>0){
        var niz= new Array();
        for(var i= 0;i<brClanova;i++){
            var redniBr= i+1;
            niz[i]= prompt("Enter "+ redniBr +". array number:");
            //prompt for geting each array element
        }
        var maximum= niz[0];
        for(var a= 0;a<brClanova;a++){
            if(niz[a]-maximum>0){
                maximum= niz[a];
            }
        }
        document.write("Greatest value in array is: " + maximum);
    }
}
于 2013-04-12T20:21:43.783 回答
0

修改代码JSFIDDLE

function duzinaNiza() {
    var brClanova = prompt("Enter the number of array elements:")*1; //convert string to intger

    if (brClanova > 0) {
        var niz = new Array();

        for (i=0; i<brClanova; i++) {
            var redniBr = i+1;
            niz[i] = prompt("Enter "+ redniBr +". array number:")*1;
            // prompt for geting each array element
        }


        var maximum = niz[0];

        for (a=0; a<brClanova; a++) {

            if (maximum < niz[a]) {
                maximum = niz[a];
            }
        }

        document.write("Greatest value in array is: " + maximum);   
    }
}
于 2013-04-12T19:01:33.613 回答