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

проффесор Мой друг не хочет использовать функции для сортировки массивов, то это должно быть сделано с петлями.

P.S. Да, я знаю ... Но не спрашивайте о документе document.write, он должен быть напечатан таким образом ...

ответ

1

Это потому, что вход является строкой, вам нужно разобрать его на Integer. Как:

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

Я думал, что вход является строкой, но я не был уверен. Итак, нет способа получить номер из приглашения без 'parseInt'? (Профессор - немой, он не знает об этой функции). –

+0

Вам нужно разобрать его, потому что сравнение строк отличается от сравнения Integer. Поскольку Sring сравнивает символ по характеру. Итак, '11 <9' со сравнением строк. Поскольку 1 меньше 9, а второе будет сравниваться. – Niels

+0

Well 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

@ Тома, есть много людей, которые не согласятся. Это всегда срабатывало. «Поскольку умножение принимает числа, 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ć oops, неправильная ссылка, теперь она работает так, как вы ожидали, любым способом, которым вы получили свой ответ. :) –

1

Проблема заключается в том, что вы сравниваете две строки, когда вы хотели сравнить два числа. Других слов, следующее выражение является легальным в яваскрипте и оценивается как истина:

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 :) –

Смежные вопросы