javascript - 输入玩家数量,然后使用数字创建玩家数组?
问题描述
var n
var players = []
var rl = readline.createInterface(process.stdin, process.stdout);
rl.question("Enter number of players ", function(answer) {
//Use number of players to generate array of player names
for (n = 0; n < parseInt(answer); n++) {
var playerNumber = n + 1
rl.question("Enter name of player " + playerNumber, function(answer) {
players.push(answer)});
// stops prompting after asking for name of player 1?
}
});
rl.close;
rl.on('close', function(){
console.log("The players are: " + players.toString());
});
这一直有效,直到“输入玩家 1 的名称”,代码存储其值。代码不会提示其他玩家。为什么?
我还尝试用 'while' 循环将其替换为 'for' 循环,但结果更糟。它甚至没有开始提示玩家 1 的姓名。为什么会这样?帮助表示赞赏:) 谢谢大家
var readline = require('readline');
var n
var players = []
var rl = readline.createInterface(process.stdin, process.stdout);
rl.question("Enter number of players ", function(answer) {
//Use number of players to generate array of player names
while (n < parseInt(answer)) {
var playerNumber = n + 1
rl.question("Enter name of player " + playerNumber, function(answer) {
players.push(answer)});
n++;
// does not even start prompting name of player 1?
}
});
rl.close;
rl.on('close', function(){
console.log("The players are: " + players.toString());
});
编辑:尝试将 rl.close 移出循环。问题仍然是一样的,这就是我的控制台中显示的内容:
输入玩家人数
(输入)4
输入玩家 1 的姓名
(输入)播放器 1
(控制台停止提示,当我尝试添加更多名称并结束进程时,数组仅存储玩家 1 的名称。)
解决方案
您可以使用递归和回调解决此问题:
const readline = require('readline');
var n
var players = []
var rl = readline.createInterface(process.stdin, process.stdout);
function readPlayers(playerCount, playerArr, curr = 0) {
if (playerCount == curr) {
rl.close();
return;
}
rl.question("Enter name of player " + (curr + 1) + ": ", function (playerName) {
playerArr.push(playerName)
readPlayers(playerCount, playerArr, curr + 1);
});
}
rl.question("Enter number of players: ", function (answer) {
//Use number of players to generate array of player names
readPlayers(parseInt(answer), players);
});
rl.on('close', function () {
console.log("The players are: " + players.toString());
});
这里 rl.close 仅在满足 readPlayers 结束递归条件时调用一次。
推荐阅读
- javascript - jQuery 组合事件未定义
- python - 熊猫 - 将熊猫数据框与分类相乘
- javafx - 在 JavaFX 中修改子节点
- inheritance - 在 Julia 中定义抽象类型的默认方法
- reactjs - 无法启动新的 Nextjs 应用程序无法加载 next.config.js
- wordpress - 如何在联系表格 7 wordpress 上将 uuid 更改为 jpg 格式?
- javascript - React Native App 在使用 react-native-maps 导航到页面时重新启动
- nasm - nasm x86-64,超过值时出现单词比较问题
- javascript - 单击后无法将选项卡固定在导航栏部分的顶部
- reactjs - 如何在 React 中制作动态表单