Javascript 为什么我的循环只看到第一个数组元素的值? 函数处理() { var-suffledDeck:数组; var扑克牌:阵列; var-playerTwoCards:数组; var-first:int=0; 第二个变量:int=1; suffledDeck=新数组(); PlayerCards=新阵列(); playerTwoCards=新数组(); //var CardLeft:int=甲板长度; 对于(变量i=0;i

Javascript 为什么我的循环只看到第一个数组元素的值? 函数处理() { var-suffledDeck:数组; var扑克牌:阵列; var-playerTwoCards:数组; var-first:int=0; 第二个变量:int=1; suffledDeck=新数组(); PlayerCards=新阵列(); playerTwoCards=新数组(); //var CardLeft:int=甲板长度; 对于(变量i=0;i,javascript,.net,arrays,Javascript,.net,Arrays,我认为问题在于var ranNum=Random.Range(1,Deck.length) ranNum应该在0到Deck.length-1之间生成一个随机索引,因为数组索引从0开始(不是1)。这些日志记录语句存在问题: function Deal() { var suffledDeck:Array; var playerOneCards: Array; var playerTwoCards: Array; var first:int =0; var second:int = 1; su

我认为问题在于
var ranNum=Random.Range(1,Deck.length)


ranNum
应该在0到
Deck.length-1之间生成一个随机索引,因为数组索引从0开始(不是1)。

这些日志记录语句存在问题:

function Deal()
{

var suffledDeck:Array;
var playerOneCards: Array;
var playerTwoCards: Array;  
var first:int =0;
var second:int = 1;

suffledDeck = new Array();
playerOneCards = new Array();
playerTwoCards = new Array();

//var CardLeft:int = Deck.length;
for(var i = 0; i < Deck.length; i++) 
{   
    Debug.Log(Deck.length);

    var ranNum = Random.Range(1,Deck.length);

    suffledDeck.Add(Deck[ranNum]);

    Debug.Log("suffled deck: " + suffledDeck.length);
}

//var halfDeck: int = (suffledDeck.length / 2);

for(var j = 0; j <=26 ; j++)
{       
    Debug.Log(first);
    Debug.Log(second);

    playerOneCards.Add(suffledDeck[first]); 
    playerTwoCards.Add(suffledDeck[second]);

    Debug.Log(playerOneCards[first].img);   
    Debug.Log(playerTwoCards[second].img);  

    first += 2;
    second += 2;        
}
}
first
second
suffledDeck
的有效索引,但是每个玩家的牌组只有一半的牌。尝试在两个日志语句中使用
j
作为下标,而不是
first
second

您还应该将循环限制为
j<26
,而不是
j,因为:

Debug.Log(playerOneCards[first].img);   
Debug.Log(playerTwoCards[second].img);
此处
second
为us 1赋值,而数组中只包含一个为零的项。导致
ArgumentoutofRangeException

因此,请尝试:

 Debug.Log(playerTwoCards[second].img);  

用于(var j=0;j但是数组从0开始,这意味着当我点击第26个元素时,它会end@JoshBanks-您的循环当前尝试处理27个元素:索引值0、1、2、…、26。您希望最后一次迭代是针对
j==25
,而不是
j==26
。我现在觉得很傻,我之前也做了同样的事情,谢谢您的帮助。我的乐意效劳:)请帮我一个忙。请单击绿色勾号和答案,接受您所有问题的正确答案。这鼓励用户帮助您。Unity标签是针对Microsoft Unity的。请不要滥用它。
  for(var j = 0; j <=26 ; j++)
  {       
    Debug.Log(first);
    Debug.Log(second);

    playerOneCards.Add(suffledDeck[first]); 
    playerTwoCards.Add(suffledDeck[second]);

    Debug.Log(playerOneCards[j].img);   
    Debug.Log(playerTwoCards[j].img);  

    first += 2;
    second += 2;        
  }