2014-02-26 99 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); 

希望其解決你的困惑。