2013-04-12 62 views
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); 
    } 
} 

好友proffesor不想使用的功能进行排序数组,这必须用循环来完成。

P.S.是啊,我知道...但不要问有关文件撰写的东西,它必须以这种方式进行打印...

回答

1

这是因为输入的是一个字符串,你必须将其解析到一个整数。像:

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

我认为输入是一个字符串,但我不确定。那么,如果没有'parseInt',没有办法从提示中获取数字? (教授是个笨蛋,他不知道这个功能)。 –

+0

您必须解析它,因为字符串比较与整数比较不同。由于Sring会逐字比较字符。所以'11 <9'与一个字符串比较。因为1小于9,并且将比较第二个数字。 – Niels

+0

好吧que sera sera,我会用parseInt()或Number()。现在它工作正常。谢谢! –

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); 
    } 
} 
+0

将字符串乘以1以转换为整数不是执行此操作的方式 – Tom

+0

@Tom什么是原因? – Anoop

+0

@Tom,有很多人会不同意。这一直工作。 '由于乘法假设数字,如果可能的话,JavaScript会使字符串成为数字。如果这是不可能的,结果是NaN。“请参阅:http://www.quirksmode.org/js/strings.html – GitaarLAB

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); 
    } 
} 
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); 
    } 
} 
+0

东西不在那里工作。 –

+0

@MiljanPuzović哎呀,错误的链接,现在它按照你的预期工作,任何方式你得到你的答案。 :) –

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); 

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

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需要的照顾。

+0

是的,我知道Math.max,但教授不知道... –

1

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

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

您的评论使用了错误的characters-'(“\”应该是“//”)

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); 
    } 
} 
+0

谢谢。我知道评论字符,我已经编辑了代码,在此处粘贴代码。原始代码没有评论和塞尔维亚语lanquage :) –