簡體   English   中英

Java中如何聲明洗牌方法?

[英]How can a method that shuffles cards be declared in Java?

此方法旨在洗牌。 當前方法聲明具有“void”返回類型,並且在運行代碼時出現錯誤“方法聲明無效;需要返回類型”。 可以改用什么返回類型?

public void shuffle()
{
    int count = 0;
    int index = 0;
    
    for(int i; i = 100; i++)
    {
        count = (int)Math.Random() * 52;
        index = (int)Math.Random() * 52;
        
        DeckofCards[count] = DeckofCards[index];
        DeckofCards[index] = DeckofCards[count];
    }
    
}

問題是for循環。 聲明int i但從不初始化 條件段當前是一個分配。 您需要初始化並更改條件。

for (int i = 0; i < 100; i++) {

}

首先,您需要初始化計數器i並將第二部分中的賦值更改為比較。 其次,要交換兩個變量,您需要使用一個臨時變量,這樣第一個變量的值就不會丟失。

for(int i = 0; i < 100; i++){
    count = (int)Math.Random() * 52;
    index = (int)Math.Random() * 52;
    Card temp = DeckofCards[count];//assuming DeckofCards is an array of Card objects
    DeckofCards[count] = DeckofCards[index];
    DeckofCards[index] = temp;
}

您從未在循環中初始化i 而且您沒有正確交換卡片。 但無論如何,這都不是洗牌的好方法。

我建議你這樣做。 這將保證對列表進行一次出色的隨機播放。 已移至列表末尾的卡片將不會再次移動。 我推測這些卡片是某種類型,例如Card

public static void shuffle(DeckOfCards[] v) {
    int count = v.length;
    Random r = new Random();
    while (count > 0) {
       int next = r.nextInt(count);
       Card temp = v[next];
       v[next] = v[--count];
       v[count] = temp;
      }
   }
}

您也可以將卡片放入List並調用Collections.shuffle()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM