我正在用java创建一个改组程序。我该如何退出呢。我是通过System.exit(0)来做的; ?
答案 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();
}
}
}