2013-12-09 36 views
0

我正在用java創建一個洗牌程序。我如何退出。我是否通過System.exit(0); ?我正在用java創建一個洗牌程序

+2

神聖的壓痕,蝙蝠俠。 – admdrew

+0

有沒有任何理由爲什麼這是[雙發佈](http://stackoverflow.com/questions/20480665/shuffling-and-drawing-from-a-deck-of-cards-in-java)? – MadProgrammer

回答

2

您可以/應該考慮創建一個Card對象。

接下來,使用2個嵌套for循環來填充列表。 最後,使用Collections.shuffle(list)。

for(suit : suits) { 
    for (rank : ranks) { 
    listOfCards.add(new Card(suit, rank)); 
    } 
} 

Collections.shuffle(listOfCards); 



class Card { 
    private final String rank; 
    private final String suit; 

    Card(String rank, String suit) { 
    this.rank = rank; 
    this.suit = suit; 
    } 
} 
+0

打我吧。唯一的一點是,我會使用枚舉而不是字符串作爲'rank'和'suit'(請參閱http://docs.oracle.com/javase/1.5.0/docs/guide/language/enums.html) ) –

+0

@AnonyAccioly:絕對,但是因爲這看起來像一個介紹編程類型的東西,所以我選擇不鑽研Rank和Suit enums(這更好) – Ivan

0

很好玩的程序學習。當你想出這個問題時,我建議你回過頭來創建一個更加面向對象的設計(即製作一個Card對象並與它們一起工作)!

看起來問題在於你錯誤地定義了你的Deck對象,然後實際上並沒有使用它。注意你的洗牌如何實際上不影響甲板本身(它應該是d.deck)!我現在要做的就是放棄Deck對象的想法,直接使用一個類,一組數據和方法。一旦你有了這些,考慮如何使用單獨的Deck對象來概括它。一旦你有了這些,試着將這些卡自己推廣到卡類。

如果您感到困惑,請隨時提問,我很樂意提供幫助。

0

閱讀@Ivan答案。 完成之後,將Scanner移出循環,並將其與一些整潔的Java 7功能(try-with-resources)結合使用,以解決您的問題。

try (Scanner s = new Scanner(System.in)) { 
    while (true) { 
     System.out.println ("shuffle or draw"); 
     Scanner s = new Scanner(System.in); 
     System.out.println ("What would you like to do?"); 
     String command = s.next(); 

     if (command.equals("shuffle")) { 
     d.shuffle(); 
     } else if (command.equals("draw")){ 
     d.draw(); 
     } 
    }  
}