2013-10-11 119 views
3

我正在嘗試編寫一個JavaScript程序,該程序將顯示用戶輸入的最大10個數字。這是我迄今爲止但沒有工作。使用JavaScript在數組中查找最大的元素

<html> 
    <head></head> 
    <body> 
    <script type="text/javascript"> 
     var counter=1; 
     var number= new Array; 
     number.length=9; 
     var largest=0; 

     while (counter <= 10) { 
      number=window.prompt("Enter Numbers 1-10 Number:"+counter+"."); 
       number[counter]= parseInt(number); 
      counter++; 
     } 
     largest=Math.max.apply(Array); 
     document.writeln("<h1>Largest number is " +largest+ "</h1>"); 
</script> 
</body> 
</html> 
+1

你讀過關於JavaScript數組什麼? –

+0

我是Javascript新手,本週剛剛開始本章 – Jessica

+1

對於新手來說,這個問題格式化的很好,並且包含了你已經與代碼一起嘗試過的內容。 +1。請務必閱讀[about](http://stackoverflow.com/about)頁面,其中包含了相當有用的信息:) – C5H8NNaO4

回答

1

幾個問題,

  • 數組索引0。您通過在0開始計數器跳過了0索引,這會搞亂數組計算。 (如果使用Math.max.apply(數組,數字),它將在沒有0索引的情況下工作)。
  • 您在每次提示時覆蓋了數字變量,可以使用window.prompt將其添加到parseInt中或將其輸入到temp變量中。
  • 您對應用變量的語法不正確。

試試這個:

var counter=0; 
var number= new Array; 
number.length=9; 
var newnumber; 
var largest=0; 




while (counter <= 10) 
{ 

    newnumber=window.prompt("Enter Numbers 1-10 Number:"+counter+"."); 
    number[counter]= parseInt(newnumber); 

    counter++; 
} 
largest=Math.max.apply(Math, number); 
document.writeln("<h1>Largest number is " +largest+ "</h1>"); 
+0

謝謝你似乎在做的伎倆 – Jessica

2

您只是在Function.prototype.apply上丟失了預期的thisArg

Syntax的,如通過描述MDN是

fun.apply(thisArg [,argsArray])

如在這個簡單的例子

Math.max.apply (null,[5,4,3,7,9,]) //9 
       ^^^^ 

其中null所示在示例中用於簡化,因爲數學不指望具體的上下文

你所試圖做的是傳遞數組numberMath.max,這則是thisArg(雖然你似乎有它誤認爲Array這將導致無論哪種方式Math.max被稱爲零參數,其產生根據§15.8.2.11

鑑於零個或多個參數,調用每個參數ToNumber並返回 最大所得的值。

  • 如果未給出參數,則結果爲-∞。
1
  1. 你混了臨時變量來保存輸入數組。
  2. apply需要兩個參數,上下文(在這種情況下不相關)和參數數組。

應該是這樣的:

var arr = []; 
while (counter <= 10) 
{ 

    number=window.prompt("Enter Numbers 1-10 Number:"+counter+"."); 
    arr[counter]= parseInt(number); 

    counter++; 
} 

largest=Math.max.apply(Array, arr); 

(Fiddle)

0
<html> 
<head> 
</head> 
<body> 
<script type="text/javascript"> 
var counter=1; 
var number= []; 

var largest=0; 

while (counter <= 10){ 

number.push(Number(window.prompt("Enter Numbers 1-10 Number:"+counter+"."),10)); 

counter++; 
} 

Array.prototype.max = function() { 
    return Math.max.apply(Math, this); 
}; 


largest = number.max(); 
document.writeln("<h1>Largest number is " +largest+ "</h1>"); 


</script> 
</body> 
</html> 
0

與您的代碼的主要問題是:

  1. 你缺少從Math.max.apply函數調用
  2. 你摧毀了this說法每次你讀取一個新值f時,數組number rom用戶。你需要一個單獨的變量用於用戶輸入。

但是,您根本不需要爲此任務構建數組。在循環中,只是比較largest只由用戶提供的數量和更新largest如果合適的話:

</head> 
<body> 
<script type="text/javascript"> 
var counter; 
var number; 
var largest=Number.NEGATIVE_INFINITY; 

for (counter = 1; counter <= 10; counter++) 
{ 

    number = window.prompt("Enter Numbers 1-10 Number:"+counter+"."); 
    number = parseInt(number); 
    if (number > largest) { 
     largest = number; 
    } 
} 
document.writeln("<h1>Largest number is " +largest+ "</h1>"); 


</script> 
</body> 
</html> 
相關問題