我正在尝试制作一个卡经销商程序,我正在使用扫描仪手动输入有多少玩家。但是,我有点困在如何将牌分/发到指定数量的玩家身上。
我想要的结果有点像这样
示例:将其交给4名玩家
黑桃-2第一层女皇心形第二玩家俱乐部-5第三玩家俱乐部-9第四玩家钻石-7第一玩家黑桃杰克第二玩家。。。。以此类推,直到它将所有52张牌发给4名玩家
这是我在寻找如何洗牌的教程时编写的最新代码。
导入java。util。扫描仪;公共类主{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("Please Input how many players there are");
int player = sc.nextInt();
if (player > 0) {
String[] type = {"S-", "H-", "D-", "C-"} ;
String[] rank = {"A ", "2 ", "3 ", "4 ", "5 ", "6 ", "7 ", "8 ", "9 ", "10 ", "J ", "Q ", "K "};
String[] cset = new String[52];
for (int i = 0; i < cset.length; i++) {
cset[i] = type[i/13] + rank[i%13];
}
for (int i = 0; i < cset.length; i++) {
int index = (int) (Math.random() * cset.length);
String temp = cset[i];
cset[i] = cset[index];
cset[index] = temp;
}
for (String u: cset) {
System.out.println(u);
}
} else {
System.out.println("Please input a correct number of player/s");
}
}
}
谁能帮帮我吗?对不起,我的解释让人困惑
正如@Mars原子和@Nexevis在注释中注意到的,您可以使用静态方法Collections.shuffle()
来洗牌ArrayList
:
适合Java语言
public enum Suit {
CLUBS('\u2663'), DIAMONDS('\u2666'), HEARTS('\u2764'), SPADES('\u2660');
private final char symbol;
private Suit(char symbol) {
this.symbol = symbol;
}
public final char getSymbol() {
return symbol;
}
}
卡片Java语言
public static class Card {
private final Suit suit;
private final int value;
private transient final String name;
public Card(Suit suit, int value) {
this.suit = suit;
this.value = value;
this.name = createName(suit, value);
}
public final Suit getSuit() {
return suit;
}
public final int getValue() {
return value;
}
public final String getName() {
return name;
}
@Override
public String toString() {
return name;
}
private static String createName(Suit suit, int value) {
char symbol = suit.getSymbol();
switch(value) {
case 1:
return "A" + symbol;
case 11:
return "J" + symbol;
case 12:
return "Q" + symbol;
case 13:
return "K" + symbol;
default:
return Integer.toString(value) + symbol;
}
}
}
发牌方法:
public static List<List<Card>> deal(int players, int playerCards) {
List<Card> cards = Stream.of(Suit.values())
.flatMap(suit -> IntStream.range(1, 14)
.mapToObj(value -> new Card(suit, value)))
.collect(Collectors.toList());
Collections.shuffle(cards);
return IntStream.range(0, players)
.map(i -> i * playerCards)
.mapToObj(index -> cards.subList(index, index + playerCards))
.collect(Collectors.toList());
}
public static List<List<Card>> dealAll(int players) {
return deal(players, Math.round(52f / players));
}
然后你可以做:
List<List<Card>> cards = dealAll(4); // or deal(4, 13) if each player has a specific number of cards
cards.forEach(System.out::println);
输出:
[5♣, 4♣, 9♣, 7♣, 5❤, 6♠, 3♠, K♦, 4♦, 6♣, Q♦, 9♦, J♦]
[Q♣, 2♦, 9♠, Q❤, 7♦, 10♣, 9❤, 5♠, 2♣, 10❤, 5♦, A❤, 8❤]
[2♠, 8♠, 8♣, 4♠, 10♦, 3♣, 2❤, 3♦, K♣, 7♠, A♣, 3❤, J❤]
[7❤, J♠, 4❤, Q♠, 6♦, 10♠, A♦, K❤, A♠, J♣, 8♦, K♠, 6❤]
我正在尝试通过单行输入检索用户输入:例如,使用扫描仪分隔符为Comma5,6,4,8,9。如何使用这种类型的输入检索任意数量的整数?也就是说,不必询问用户希望输入多少个整数。下面是我一直在使用的代码,但是当我想中断时,不能中断while循环。请注意,我保留System.Out以跟踪程序当前运行的位置。令人困惑的是,我可以以这种格式获得用户输入,但程序停止并再次要求用户输入,然后如果输入是一个整数,
问题内容: 请问我关于扫描仪的问题;我在一家小公司工作;我们有一个软件;它生成一个大文本文件;而且我们必须从中得到一些有用的信息; 我想用Java编写一个简单的应用程序以节省时间;你能指导我吗? 例如我要这个输出; 输出量 RFID:25蓝色:562 WifiID:2610 RFID:33 RFID数量:2 例如;这是我的文本文件,因为使用我们的软件生成的每个文件都有14000行:) 我用此源代码
我正在创建一个小算法,这是其中的一部分。 如果用户输入非整数值,我想输出一条消息,让用户再次输入一个数字: 我得到了一个永无止境的循环,我不知道为什么。 如果用户输入非整数数字,我如何识别? 如果用户输入非整数数字,我如何要求用户再次输入? 更新 当我打印异常时,我得到了InputMismatchExctive,我应该怎么做?
我试图从用户那里得到2个整数。这是我的代码的相关部分: 起初,它抛出一个,所以我使用了。现在,它只需跳过扫描器并立即调用。
问题内容: 我有一个创建多个对象并将其放入一个类的类,如下所示: 我有一个从控制台扫描输入“ add”的应用程序,如果找到该应用程序,则调用如下所示的方法: 该应用程序应允许用户根据需要多次输入“添加”,但是在add调用该方法后将出现错误“找不到行” 。 我猜这是因为方法中的尚未关闭,然后在需要时重新打开。这是程序的问题吗?如果是,我将如何修复它? 请注意,该程序尚未完成,因为我将添加一种出售这些
我创建了一个简单的扫描器,用于计算中的字符串数。txt文件。每个字符串位于下一行。它算错了,每次它给我数字297,甚至有超过20000个字符串。这个txt文件是由我编写的另一个程序创建的,它从网站获取链接,并使用FileWriter和BufferedWriter将其保存到。txt文件。可能有什么问题? 编辑:字符串示例: