2012-08-27 52 views
3

我有我的主要類正在運行,我想運行一個單獨的類來洗牌數字,然後將混洗的數字返回到我的主類。在我的洗牌班,我有回報聲明......但現在我該怎麼辦?如何在我的主類中使用我的int數組的隨機順序?Java中的返回數組

這裏是我的洗牌類:

public class Shuffle { 
public static int[] getShuffle() { 
    int[] cards = new int[52]; 
    ArrayList<Integer> cards_objs = new ArrayList<Integer>(); 

    for (int i = 0; i < cards.length; i++) { 
     cards_objs.add(i); 
    } 

    Collections.shuffle(cards_objs); 

    for (int i = 0; i < cards.length; i++) { 
     cards[i] = cards_objs.get(i); 

    } 

    return cards; 
} 

}

我想提出一個紙牌遊戲(如果你不能告訴);

我想使用這個洗牌類,以便洗牌...但沒有牌會多次出現。

當我退卡時,如何在遊戲課中使用它們?例如,如果陣列中的第一個數字是1,那麼卡片是俱樂部的Ace,如果數字是2,則卡片是 ,則卡片是鑽石的Ace。等等... 我不張貼足夠的信息道歉......我是新來的Java(你可以告訴)

所有幫助將不勝感激,

史蒂夫

編輯: 我發現我的問題是什麼,我不認爲我的問題足夠清楚。儘管如此,感謝大家的幫助,它給了我不同的方法來處理這個項目的想法。

+5

這是不是很清楚你想要做什麼。你能發佈一些相關的代碼嗎? –

回答

3

我覺得使用enum你可以實現Card遊戲更好的方式。

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 

// This is just sample example and it is just to show an approach. I had not enough time to make code perfect but it works fine. 
public enum Deck 
{ 
DECK; 
enum Rank 
{ 
    DEUCE(2), THREE(3), FOUR(4), FIVE(5), SIX(6), 
    SEVEN(7), EIGHT(8), NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11); 

    Rank(int rank) 
    { 
     this.rank = rank; 
    } 

    private final int rank; 

} 

enum Type 
{ 
    SPADES, 
    HEARTS, 
    DIAMONDS, 
    CLUBS; 
} 

class Card 
{ 
    private final Rank rank; 
    private final Type type; 

    Card(Rank rank, Type type) 
    { 
     this.rank = rank; 
     this.type = type; 
    } 

    @Override 
    public String toString() 
    { 
     return type.name() + rank.name(); 
    } 

} 

static List<Deck.Card> cards = new ArrayList<Deck.Card>(); 
static 
{ 
    for (Rank rank : Deck.Rank.values()) 
    { 
     for (Type type : Deck.Type.values()) 
     { 
      cards.add(DECK.new Card(rank, type)); 
     } 
    } 

} 

List<Deck.Card> shuffle() 
{ 
    Collections.shuffle(cards); 
    System.out.println(cards); 
    System.out.println(cards.size()); 
    return Collections.unmodifiableList(cards); 
} 

public static void main(String[] args) 
{ 
    DECK.shuffle(); 
} 
} 
+0

他正在使用它... – CloudyMarble

+0

@ O.D改變了解決方案我想我得出結論太快:( –

0

要麼您更改數組順序,以便您可以在主類中的數組中迭代正常順序,或者從包含所需順序(索引)的shuffle方法返回一個數組,然後按照此順序訪問它們。

選項A是更改主數組elemtns的roder,選項B讀取數組並決定確定新的順序,然後將順序返回爲一個rray backt,然後訪問主數組新命令。

0

你可以簡單地在你的主類中有一個方法,在這裏你可以進行混洗,並將新的混洗號碼作爲數組返回。

如果您確實想要使用另一個類,那麼您可以使用該類的實例來做到這一點,然後調用reShuffleNumbers(),而reShuffleNumbers()將返回您想要的數組數組。

1

不需要定義獨立的類,我覺得,只要創建數字的ArrayList,它傳遞給Colections級Java的

public static void shuffle(List list) 

你的名單將直接洗牌

+0

Steven在他的方法中使用'Collections.shuffle(列表列表)'。 – Tobold

0

試試這個 -

public static void shuffleArray(int[] a) { 
    int n = a.length; 
    Random random = new Random(); 
    random.nextInt(); 
    for (int i = 0; i < n; i++) { 
     int change = i + random.nextInt(n - i); 
     swap(a, i, change); 
    } 
    } 

    private static void swap(int[] a, int i, int change) { 
    int helper = a[i]; 
    a[i] = a[change]; 
    a[change] = helper; 
    } 

將數組傳遞給方法shuffleArray(),您將獲得按位置修改的數組元素。

我希望這是你在找什麼。