2013-10-11 3 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

Вы читали что-нибудь о яваскрипте массивов? –

+0

Я новичок в Javascript, только что начал главу на этой неделе – Jessica

+1

Для новичков этот вопрос довольно хорошо отформатирован, а также содержит информацию о том, что вы уже пробовали вместе с кодом. +1 для этого. Обязательно прочитайте страницу [about] (http://stackoverflow.com/about), которая содержит весьма полезную информацию :) – C5H8NNaO4

ответ

1

несколько вопросов,

  • Массивы 0 индексируются. Вы пропустили индекс 0, запустив счетчик на 0, это испортит вычисление массива. (если вы поедете с Math.max.apply (массив, число), он будет работать без индексации 0).
  • вы переписываете числовую переменную с каждым приглашением, либо используйте window.prompt для подачи в parseInt, либо для его подачи в временную переменную.
  • у вас был неправильный синтаксис для применяемой переменной.

Попробуйте это:

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

Вы просто не хватает ожидаемого thisArg для Function.prototype.apply.

Syntax, как описано MDN является

fun.apply (thisArg [, argsArray])

Как показано в этом простом примере

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

, где null используется в примере для простоты, поскольку математика не ожидает определенного контекста

То, что вы пытаетесь сделать, передавая массив number в Math.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. вам не хватает this аргумент от вызова в Math.max.apply функции
  2. вы разрушаете массив number каждый раз, когда вы читаете новое значение f от пользователя. Для ввода пользователя требуется отдельная переменная.

Однако для этой задачи вам действительно не нужно создавать массив. Внутри цикла, просто сравнить 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> 
Смежные вопросы