【发布时间】:2013-01-23 18:44:59
【问题描述】:
所以我正在编写这个脚本。当我完成它时,它应该用于制作 2-and-2 组。但无论如何;脚本开头的“输入”数组将从我的 HTML 文件中获得 22 个不同的输入。作为标准,我给他们的值是 1-22。问题是我的两个块“第一个数字”和“第二个数字”效果不佳:它们没有返回正确的数字。因为我希望每个 elev[x] 都使用一次!不是2次,不是0次,一次!并且这些块像其中一些一样返回两次,其中一些甚至没有被使用。那么我该如何解决呢?
function Calculate(){
var elev = [];
var inputs = document.getElementsByName("txt");
for(i=0; i<inputs.length; i++) {
elev[i] = {
"Value": inputs[i].value,
"Used": false
};
}
function shuffle(elev){
var len = elev.length;
for(i=1; i<len; i++){
j = ~~(Math.random()*(i+1));
var temp = elev[i];
arr[i] = elev[j];
arr[j] = temp;
}
}
for(var v=0; v<1; v++) {
shuffle(elev);
document.write(elev + '<br/>\n');
}}
是的,我还是个编程新手,我只想学习我能学到的东西。
问题通过费雪-耶茨洗牌解决。
【问题讨论】:
-
elev[r] = elev[a]; elev[a] = elev[r];不会交换两个元素。首先,它将elev[a]分配给elev[r](丢失elev[r]的值),然后将相同的值分配回elev[a]。 -
为什么
shuffle有一个循环?我使用循环生成多个随机播放(以证明它是随机的),但我的印象是您只需要一个。 -
不要使用
document.write。使用 DOM 操作或至少document.body.innerHTML += -
此外,除非您实现
toString,否则对象不会完全转换为字符串,因此打印对象数组不会有任何好处。
标签: javascript loops if-statement