2014-04-07 128 views
0

我使这个应用程序洗牌和显示随机卡每次用户点击当前卡的形象。我制作了一个包含卡片所有图像的阵列,并使用'Fisher Yates Shuffle'来混洗阵列。这里是我写的代码:setImageResource洗牌卡阵列

public class MainActivity extends Activity {  

int[] cards={R.drawable.aceofspades,R.drawable.aceofhearts,R.drawable.aceofclubs};{ 
int i = cards.length, j, temp; 

while(--i > 0){ 
    j = (int) Math.floor(Math.random() * (i+1)); 
    temp = cards[j]; 
    cards[i] = cards[j]; 
    cards[i] = temp; 
} 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

} 

public void imageClick(View view) { 

    { 
    ImageView image = (ImageView) findViewById(R.id.imageDice1); 
    image.setImageResource(cards); // This gives an error: change type of 'cards' to 'int'. 
    } 


} 

} 

问题是,我不知道如何设置'image.setImageResource'。它应该是shuffled cards数组中的第一个,当用户点击该卡时,它应该成为数组中的下一个(类似于i ++)。 我试过'卡',但它给了我一个错误。 “卡片[i]”也不起作用。可能是什么问题呢?

回答

0

尝试这样的事情。

public class MainActivity extends Activity { 

    int currentCardIndex = 0; 
    int[] cards = { /* card drawables here */}; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     shuffle(cards); 
    } 

    public void imageClick(View view) { 
     ImageView image = (ImageView) findViewById(R.id.imageDice1); 
     image.setImageResource(cards[currentCardIndex++]); 
    } 

    private void shuffle(int[] array) { 
     int idx, tmp; 
     Random random = new Random(); 
     for (int i = array.length - 1; i > 0; i--) { 
      idx = random.nextInt(i + 1); 
      tmp = array[idx]; 
      array[idx] = array[i]; 
      array[i] = tmp; 
     } 
    } 

} 
+0

作品像魅力,谢谢先生! –

0

条件循环永远不会单独存在于一个程序把while loop在函数内部

像这样

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    while(--i > 0){ 
     j = (int) Math.floor(Math.random() * (i+1)); 
     temp = cards[j]; 
     cards[i] = cards[j]; 
     cards[i] = temp; 
    } 

} 
+0

谢谢你的回答,我改变了它,但它并没有解决第一个问题。 –