我只是想做这个简单的事情(制作一个数字数组,然后获得同一数组的第二大数字),我无法理解为什么它不会将所选数字从一个数组推送到第二个数组(从中打印出第二大数字)。
var cisla = [];
var i = 0;
for(var i=0; i<5; i++){
var x = prompt("Put " + (i+1) + ". number");
cisla[i] = x;
}
var p = document.createElement("p");
p.innerHTML = "Your array: " + cisla;
document.getElementsByTagName("body")[0].appendChild(p);
var najvacsie;
var index;
var cisla2 = [];
var dlzka = cisla.length;
while(i<dlzka){
najvacsie = cisla[0];
for(var x=0; x<cisla.length; x++){
if(najvacsie < cisla[x]){
najvacsie = cisla[x];
index = cisla.indexOf(najvacsie);
}
}
cisla2.push(najvacsie);
cisla.splice(index, 1);
i++;
}
var pp = document.createElement("p");
pp.innerHTML = "Ordered array: " +cisla2;
document.getElementsByTagName("body")[0].appendChild(pp);
var ppp = document.createElement("p");
ppp.innerHTML = "The 2nd biggest number of your array is: " + cisla2[1];
document.getElementsByTagName("body")[0].appendChild(ppp);
感谢您的回答。
答案 0 :(得分:2)
我做了一些修改,看到了评论。
但只是为了向您展示代码中的主要问题:
if (najvacsie < cisla[x]){
najvacsie = cisla[x];
index = cisla.indexOf(najvacsie);
}
问题是,如果你的najvacsie
已经是最大值,那么索引永远不会被设置,那么下一个
cisla.splice(index, 1);
要么使用最后一个值进行拼接,要么undefined
需要0
作为拼接值(这可能是第一轮中的预期行为)。
现在这是工作模式:
var array = [];
for (var i = 0; i < 5; i++) {
var x = prompt("Put " + (i + 1) + ". number");
array[i] = parseInt(x, 10); // otherwise it will sorted by string
}
var p = document.createElement("p");
p.innerHTML = "Your array: " + array;
document.getElementsByTagName("body")[0].appendChild(p);
var tempValue;
var index;
var orderedArray = [];
while (array.length) { // that is shorter
tempValue = array[0];
for (var x = 0; x < array.length; x++) {
if (tempValue < array[x]) {
tempValue = array[x];
}
}
index = array.indexOf(tempValue); // move this here
orderedArray.push(tempValue);
array.splice(index, 1);
}
//orderedArray = array.slice(0).sort().reverse(); // that may be better ...
var pp = document.createElement("p");
pp.innerHTML = "Ordered array: " + orderedArray;
document.getElementsByTagName("body")[0].appendChild(pp);
var ppp = document.createElement("p");
ppp.innerHTML = "The 2nd biggest number of your array is: " + orderedArray[1];
document.getElementsByTagName("body")[0].appendChild(ppp);
答案 1 :(得分:0)
你可以在线性时间内完成(我会尝试用一种通用的方式来实现)
function secondBiggestOf(array) {
var biggest = -Infinity;
var secondBiggest = -Infinity;
for (var i = 0, l = array.length; i < l; i++) {
var current = array[i];
if (biggest < current) {
var tmp = biggest;
biggest = array[i];
if (secondBiggest !== -Infinity) {
secondBiggest = tmp;
}
} else if (secondBiggest < current) {
secondBiggest = current;
}
}
return secondBiggest;
}