我正在创建一个JS,我想创建一个简单的游戏,首先是选择玩家数量,每个玩家的名字以及玩家是否是经销商。每场比赛只能有一位经销商:
function player(playerName, playerDealer) {
this.playerName = playerName;
this.playerDealer = playerDealer;
}
var playerNumber = prompt('Nr of players?');
var playersArray = [];
for (i = 0; i < playerNumber; i++) {
var j = i + 1;
var dealerAssigned = false; // control variable to check whether dealer has been assigned
var inputName = prompt('Name of player nr ' + j);
var inputDealer = prompt('Is player ' + inputName + ' also a dealer? (yes/no)');
playersArray[i] = new player(inputName, inputDealer);
for (k=0;k<playerNumber;k++){ // I want to go through the players array to check if dealer has been assigned
if (playersArray[k].playerDealer == 'yes') {
dealerAssigned=true;
break;
};
};
if(dealerAssigned){ //if dealer has been assigned, don't add the current player to the array and continue with the next iteration
alert("already assigned");
continue;
};
};
我需要在循环中加入一个简单的测试,以检查经销商是否已被任命。如果是这样,我希望脚本只提醒“已经分配”并跳到下一个播放器。但我不断收到以下错误
TypeError:
playersArray[k]
未定义
有人可以解释为什么不明确?/我做错了什么?
答案 0 :(得分:2)
你特别询问的错误在我看来是你正在迭代未定义的数组值,因为你得到的错误表明。
你得到了你想要的队员数量
var playerNumber = prompt('Nr of players?');
然后,你继续进行两次迭代(一次嵌套在另一次),其中内部循环试图访问尚未分配的值,因为外部循环尚未到达:
for (i = 0; i < playerNumber; i++) {
playersArray[i] = new player(inputName, inputDealer);
for (k=0; k < playerNumber; k++) {
if (playersArray[k].playerDealer == 'yes') {
...
}
}
}
在我看来,这里的逻辑错误是嵌套循环。我建议只在一个循环中初始化所有玩家,然后确认所有玩家之后都有一个指定的经销商。
我应该补充一点,我在这里是故意的近视,并且非常关注所提出的问题,并忽略了我看到的其他问题。
答案 1 :(得分:0)
for循环中的for循环正在迭代尚未填充的数组。
第一次迭代playersArray[j] = new Player(...)
生成数组[Player]
或一个元素的数组!然而第二个循环正在寻找许多元素的数组。一旦你找到playersArray[1]
,但只有playerArray[0]
你得到了未定义,所以undefined.playerDealer
会导致一个TypeError。
答案 2 :(得分:0)
`这是你的结构规定:
for (i = 0; i < playerNumber; i++) {
playersArray[i] = new player(inputName, inputDealer);
for (k=0;k<playerNumber;k++)...{
//anything with index k > i is undefined, since your outer loop
//hasn't initialized it yet.
}
}
您的i
循环似乎正在尝试插入数组大小的元素,但您的k
循环也尝试访问整个数组而不仅仅是初始化的部分。将此限制为for (k=0; k<i+1 ;k++)
,因此您只需检查先前初始化的playersArray