#javascript #for-loop
Вопрос:
Я храню числа в массиве и нахожу минимальное и максимальное значение массива. проблема в том, что результат ненадежен. например, когда я сохраняю эти числа 15, 20, 5, 30, ожидаемый результат должен быть max:30 и min:5, но вместо этого результат max: 5 мин: 15. любая помощь будет признательна.
var array = [];
function addNum() {
var num = document.getElementById("input").value;
array.push(num);
document.getElementById("input").value = null;
document.getElementById("confirmation").innerHTML = "Num " num " has been entered.";
document.getElementById("array").innerHTML = "array: " array;
}
function clearArray() {
array.splice(0, array.length); //empties array
}
function findMax(array) {
var highest = array[0];
for (var i = 0; i < array.length; i ) {
if (array[i] >= highest) {
highest = array[i];
}
}
return highest;
}
function findMin(array) {
var lowest = array[0];
for (var i = 0; i < array.length; i ) {
if (array[i] < lowest) {
lowest = array[i];
}
}
return lowest;
}
function findMinMax() {
var max = findMax(array);
var min = findMin(array);
console.log("max: " max);
console.log("min: " min);
}
<body>
<div class="container">
<input id="input" type="text" required="required" />
<input id="submitbutton" type="button" value="Add" onClick="addNum();" />
<input id="clearbutton" type="button" value="Clear" onClick="clearArray();" />
<button onclick="findMinMax()">Find MinMax</button>
<p id="array"></p>
<p id="confirmation"></p>
<div id="display">
<p id="array"></p>
<p id="lowest"></p>
<p id="highest"></p>
</div>
</div>
</body>
Комментарии:
1. Вы пропустили объявление параметра по адресу
function findMinMax() {
. Так и должно бытьfunction findMinMax(array) {
, хотя я бы посоветовал не использовать имена var, которые выглядят как объявление типа… Изменить: то же самое дляaddNum()
2. @Ant привет, спасибо за ответ. к сожалению, ваше предложение не сработало. он выдает ошибку «массив не определен».
Ответ №1:
ваш код в порядке, но вы сравниваете строки, а не целые числа ! поскольку вы получаете значение из входных данных , это строка и сравниваете код ascii символов, идущий слева направо, если один символ ascii больше, то вся строка больше, например "20" > "1000"
, потому что 2 больше 1 в ascii ( 50 > 49 кодов ascii ) >проверьте этот mdn
// the array you tried was
array = ['15', '20', '5', '30']
min : 15 // 1 is the lowest
max : 5 // 5 is the highest
все, что вам нужно сделать, это проанализировать num
его в int, прежде чем добавлять его в массив, и вот исправление :
var array = [];
function addNum() {
var num = document.getElementById("input").value;
array.push(parseInt(num));
document.getElementById("input").value = null;
document.getElementById("confirmation").innerHTML = "Num " num " has been entered.";
document.getElementById("array").innerHTML = "array: " array;
}
function clearArray() {
array = []; //empties array
document.getElementById("array").innerHTML = '';
}
function findMax(array) {
var highest = array[0];
for (var i = 0; i < array.length; i ) {
if (array[i] >= highest) {
highest = array[i];
}
}
return highest;
}
function findMin(array) {
var lowest = array[0];
for (var i = 0; i < array.length; i ) {
if (array[i] < lowest) {
lowest = array[i];
}
}
return lowest;
}
function findMinMax() {
var max = findMax(array);
var min = findMin(array);
console.log("max: " max);
console.log("min: " min);
}
<body>
<div class="container">
<input id="input" type="text" required="required" />
<input id="submitbutton" type="button" value="Add" onClick="addNum();" />
<input id="clearbutton" type="button" value="Clear" onClick="clearArray();" />
<button onclick="findMinMax()">Find MinMax</button>
<p id="array"></p>
<p id="confirmation"></p>
<div id="display">
<p id="array"></p>
<p id="lowest"></p>
<p id="highest"></p>
</div>
</div>
</body>