我正在java中创建一个shuffling程序

时间:2013-12-09 21:44:02

标签: java

我正在用java创建一个改组程序。我该如何退出呢。我是通过System.exit(0)来做的; ?

4 个答案:

答案 0 :(得分:3)

您只能发出一个命令的原因是因为您正在关闭扫描仪。 http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#close()处的文档表明,当您这样做时,它也会关闭基础流。因此,在您关闭扫描仪后,您无法再获得任何输入。 您应该将扫描仪初始化移到while循环之外,并且永远不要关闭它。

答案 1 :(得分: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;
  }
}

答案 2 :(得分:0)

有趣的学习计划。当你想出这个时,我高度建议回过头来创建一个更面向对象的设计(即制作一个Card对象并使用它们)!

看起来问题是您正确地定义了Deck对象,然后实际上没有使用它。注意你的改组实际上不会影响牌组本身(它应该是d.deck)!我现在要做的是废弃Deck对象的想法,直接使用一个类,一组数据和方法。一旦掌握了这一点,请考虑如何使用单独的Deck对象来概括它。一旦你有了,尝试将卡本身概括为卡类。

如果你感到困惑,请随时问我问题,我很乐意提供帮助。

答案 3 :(得分: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();
      } 
   }      
}