Javascript 嵌套';对于';循环数组未定义
我正在开发一个JS,我想创建一个简单的游戏,首先选择玩家数量、每个玩家的名字以及一个玩家是否是庄家。每个游戏只能有一个经销商:Javascript 嵌套';对于';循环数组未定义,javascript,Javascript,我正在开发一个JS,我想创建一个简单的游戏,首先选择玩家数量、每个玩家的名字以及一个玩家是否是庄家。每个游戏只能有一个经销商: function player(playerName, playerDealer) { this.playerName = playerName; this.playerDealer = playerDealer; } var playerNumber = prompt('Nr of players?'); var playersArray = [];
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;
};
};
函数播放器(playerName,playerDealer){
this.playerName=playerName;
this.playerDealer=playerDealer;
}
var playerNumber=prompt('n个玩家?');
var playersArray=[];
对于(i=0;i 对于(k=0;k,我认为您特别询问的bug是,您正在迭代未定义的数组值,正如您得到的错误所表明的那样
你得到了你想要的球员数量
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') {
...
}
}
}
(i=0;i{
PlayerArray[i]=新玩家(inputName,inputDealer);
对于(k=0;k
在我看来,这里的逻辑错误是嵌套循环。我建议只在一个循环中初始化所有玩家,然后验证所有玩家都有指定的经销商
我应该补充一点,我在这里故意目光短浅,只关注所问的问题,而忽略了我看到的其他问题。for循环中的for循环正在迭代尚未填充的数组
第一次迭代
playersArray[j]=新玩家(…)
使数组[Player]
或一个数组成为一个元素!但是第二个循环正在寻找一个包含许多元素的数组。一旦你寻找playersArray[1]
,但是只有playerArray[0]
您未定义,因此未定义。playerDealer
会导致类型错误。`这是您的结构,请点击:
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=0;i{
PlayerArray[i]=新玩家(inputName,inputDealer);
for(k=0;ki是未定义的,因为您的外循环
//还没有初始化它。
}
}
似乎您的
i
-循环正在尝试插入数组大小的元素,但您的k
-循环正在尝试访问整个数组,而不仅仅是初始化的部分。请将此限制为(k=0;kk=0
创建了一个全局,我想你不会想要的!谢谢-我想通过playersArray[I]=新玩家(inputName,inputDealer)
I我初始化第一个播放器,并在position 0上将其推入数组。如果这是正确的,那么第二个循环应该至少能够检查第一个播放器,不是吗?当然,但是在嵌套循环的第二次迭代中使用“k”计数器(k=1),但在外部循环的第一次迭代中(I=0)如何?在执行的这一点上,定义了PlayerArray[0],因为它是在索引0处插入的,但外部循环(正在初始化值)尚未初始化索引1处的播放机。但您的内部循环正在检查索引1处的播放机。然后,它将检查索引2处的播放机。然后检查索引3处的播放机。依此类推,而只有索引0处的播放机已初始化。@bmkhin:您说得对!我完全改变了此练习的方法,去掉了第二个循环,并使用了if(dealerAssigned&&inputDealer=='yes'){alert(“已分配”);PlayerArray[i]=新玩家(inputName,'no');
,效果非常神奇。感谢您的帮助!