在数组中找到最大值(在整数集中)

时间:2013-04-12 18:57:04

标签: javascript

我的朋友让我帮他完成作业,我被困住了。这是作业:

用户必须在数组中输入第一个提示框中的元素数量。然后,他将获得每个号码的提示框。现在,输出必须是数组中的最大数字。但这根本行不通。使用下面的代码,我总是得到最高位数的元素。 (如果数字为负数或正数,则无关紧要,代码不能正常工作)

这是我的代码(它甚至不能在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);   
    }
}

我朋友的proffesor不想使用函数来排序数组,这必须用循环来完成。

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

7 个答案:

答案 0 :(得分:1)

这是因为输入是一个String,你必须将它解析为一个Integer。像:

niz[i] = parseInt(prompt("Enter "+ redniBr +". array number:"), 10);

答案 1 :(得分: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);   
    }
}

答案 2 :(得分:1)

尝试this,[提示:我刚刚使用'+' 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);   
    }
}

答案 3 :(得分:1)

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

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

您应该执行的操作是转换从函数提示符接收的值,因此将其视为数字。您可以使用以下功能执行此操作:

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

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

答案 4 :(得分: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);
}

我使用了Unary Plus Operator

只是要知道,在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会处理它。

答案 5 :(得分: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);
    }
}

答案 6 :(得分: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);   
    }
}