2014-02-26 102 views
0
<!doctype html> 
<html> 
<head> 
    <title>Largest number</title> 
</head> 
<body> 
    <center> 
     <h2>largest number</h2> 
     <script language="Javascript" type="text/Javascript"> 

      function Max(num1,num2,num3) 
      { 
       var largest=arguments[num1,num2,num3] 
       for(i=0;i<arguments.length;i++) 
       { 
        if((num1>num2)&&(num1>num3)) 
         largest=num1 
        else if((num2>num1)&&(num2>num3)) 
         largest=num2 
        else 
         largest=num3 
       } 
       return(largest) 
      } 
      document.write("</br>") 
      var num1 = prompt("Enter first number"," ") 
      var num2 = prompt("Enter second number"," ") 
      var num3 = prompt("Enter third number"," ") 
      var large = Max(num1,num2,num3) 
      document.write("You entered",num1,",",num2,",",num3) 
      document.write("</br>") 
      document.write("The largest number is :",large) 
     </script> 
    </center> 
</body> 
</html> 

该程序通过提示接受3个数字。只有特定的数字才会产生奇怪和意想不到的输出。如果我在每个提示出现时给这个程序输入5,21和100,那么输出将会被赋予5作为最大数字。即使对于输入10,24和5,输出也将是5.这个javascript代码有什么问题?

使用if条件或数组时是否存在任何问题。

请帮帮我。

+1

确保您的号码实际上是数字,而不是字符串。问题,这是什么'参数[num1,num2,num3]'?缩进和分号发生了什么? – elclanrs

+0

也要小心,因为JavaScript有一个内置的方法称为最大。 – TheOneWhoPrograms

+0

@TheOneWhoPrograms:它不。它有一个'Math'对象,方法为'max'。不会干预,虽然它可能没有用... – elclanrs

回答

3

你实际上并没有将数字传递给函数。 prompt()值存储为字符串。

按字母顺序,“5”大于“100”,因为“5”在“1”之后。

您需要使用parseInt()以确保传入整数,或者如果允许十进制值,则使用parseFloat()

var large = Max(parseInt(num1, 10), parseInt(num2, 10), parseInt(num3, 10)); 

jsFiddle

你不妨做Max()函数内解析,以确保参数总是整数数量。

此外,arguments[num1, num2, num3]largest的初始分配没有意义。该变量只需要声明。你的函数也有一个不必要的循环。

+0

谢谢@ rink.attendant.6。我转换为整数,其工作良好... – learner

0

您的代码有几个问题。首先,您不应该尝试访问arguments内的多个值,特别是不要使用值而不使用索引。

var largest; 

应该足够你的情况。 接下来,您正在多次运行for循环,完全没有任何用处,因为您已经在检查条件。决定是否要使用for外观或链式else/if语句。另外,通过查看你的代码,看起来你想让这个函数接受任意多的参数,而你的这个实现不支持这个。所以,这是一个固定版本的代码,应该可以处理任意数量的参数(大于0)。

function Max(){ 
    var largest; 
    for(i=0;i<arguments.length;i++){ 
     var intval = parseInt(arguments[i]); 
     if (intval > largest) 
      largest = intval; 
    } 
    return largest; 
} 
0

您可以使用的方法类似:

var max = function(){ 
    var p = []; 
    for(var i = 0; i < arguments.length; i++) 
     p.push(parseInt(arguments[i]) || null); 
    return Math.max.apply(Math.max, p); 
} 

console.log(max(1, 2, "123" ,"4", "null", "123123123")) 

您可以demo

先进例如玩

var max = function(){ 
    var p = []; 
    for(var i = 0; i < arguments.length; i++){ 
     p.push(parseInt(arguments[i]) || null); 
    } 
    return Math.max.apply(Math.max, p); 
} 

var number = prompt("Enter the number of input"); 
if(parseInt(number) != NaN){ 
    var l = []; 
    for(var i = 0; i < parseInt(number); i++){ 
     var e = prompt("Enter number #" + (i+1)); 
     l.push(e); 
    } 
    alert("Largest number is " + max.apply(null, l)); 
} 

玩了先进的demo

0

您需要使用parseInt来确保数字被视为数字,然后按照您的预期进行排序。

function Max(num1,num2,num3) 
{ 
var largest=arguments[num1,num2,num3] 
for(i=0;i<arguments.length;i++) 
{ 
    var i1 = parseInt(num1); 
    var i2 = parseInt(num2); 
    var i3 = parseInt(num3); 
    if((i1>i2)&&(i1>i3)) 
    largest=i1 
    else if((i2>i1)&&(i2>i3)) 
    largest=i2 
    else 
    largest=i3 
} 
return(largest) 
} 
document.write("</br>") 
var num1 = prompt("Enter first number"," ") 
var num2 = prompt("Enter second number"," ") 
var num3 = prompt("Enter third number"," ") 
var large = Max(num1,num2,num3) 
document.write("You entered",num1,",",num2,",",num3) 
document.write("</br>") 
document.write("The largest number is :",large) 
1

与此相关的另一个例子是

var myArray = [45,50,2,99,0]; 
var result = Math.max.apply(Math,myArray); 
document.write("Max value is = "+result); 

希望其解决你的困惑。