将名称添加到数组并随机选择一个(Javascript)

时间:2017-07-12 07:09:01

标签: javascript arrays loops while-loop do-while

坚持这个练习。

创建一个程序,挑选比赛或抽奖的获胜者。在用户将条目留空之前提示参赛者的姓名。然后随机选择一名获胜者。

示例输出

输入名称:荷马
输入名称:Bart
输入名称:Maggie
输入名称:Lisa
输入名称:Moe
输入名称:
获胜者是......玛吉。

约束

•使用循环将用户输入捕获到数组中 •使用随机数生成器从阵列中提取值 •不要在阵列中包含空白条目 •某些语言要求您提前定义数组的长度。您可能需要找到另一个数据结构,如ArrayList。

**编程新手

这是我到目前为止所做的:

var name;
var users = [];
var winner = Math.floor(Math.random() * users.length + 1);

while (true) {
  users.push(name = prompt("Enter a name:"));
  if (name === "") {
    break;
  }
};

document.write(users + "<br>" + winner);

但是获胜者变量除1之外不显示任何内容?

4 个答案:

答案 0 :(得分:2)

使用while循环

我不会给你正确的代码,因为这会破坏练习,但这就是这个想法:

setup array
  while (true)
  wait for input
  if input blank
      break out of loop
  else
      add entry to array
  end-while
  choose a winner
  end

答案 1 :(得分:2)

在使用名称填充数组之前,您无法获取随机索引。首先,使用while循环收集名称,然后获取随机索引。

移动这一行:

var winner = Math.floor(Math.random() * users.length);
在while循环之后

你想出了索引,但是你忘了从数组中选择带有相关索引的值。尝试添加:

document.write(users + "<br>" + users[winner]);

答案 2 :(得分:2)

你实际上几乎就在那里。

您的原始帖子中首先出现的错误是您在添加名称之前选择了用户。必须在输入后做出选择。

第二个问题是您将+1添加到随机nr生成器中。这是没有必要的,因为javascript数组是基于0的,所以对于4个条目的长度,索引从0到3。

您最不想要的是显示实际用户而不是数字,因为您可以访问用户数组并显示您选择的索引,如users[winner]

如果你想更加确定,你可以补充一点,如果没有添加用户,就不会有赢家;)(通过检查users.length属性)

var name;
var users = [];

while (true) {
  users.push(name = prompt("Enter a name:"));
  if (name === "") {
    break;
  }
};
// the winner can only be decided here (and + 1 is not necessary as Javascript has a 0 based index in arrays)
var winner = Math.floor(Math.random() * users.length);
// add the user array so you can get the index
// the join will make sure that your users are shown below eachother
alert(users.join('\n') + "\n" + users[winner] + ' won');

答案 3 :(得分:0)

得到它,谢谢大家。

var name;
var users = [];

while (true) {
  users.push(name = prompt("Enter a name:"));
  if (name === "") {
    break;
  }
};

var numUsers = users.length - 1;
var winner = Math.floor(Math.random() * numUsers + 1);

document.write("The winner is..." + users[winner]);