在java中,如何从字符串数组中获取两个随机值之和?
我正在做一个纸牌对游戏,它从一个字符串数组中生成两个随机值。。我想知道的是如何从字符串数组中获取两个随机值的总和,以确定获胜者。这是密码在java中,如何从字符串数组中获取两个随机值之和?,java,arrays,arrayofstring,Java,Arrays,Arrayofstring,我正在做一个纸牌对游戏,它从一个字符串数组中生成两个随机值。。我想知道的是如何从字符串数组中获取两个随机值的总和,以确定获胜者。这是密码 import java.util.*; public class Cards { private String suit; private String face; private String[] cardSuits; private String[] cardFaces; private Random ran; public Cards() {
import java.util.*;
public class Cards {
private String suit;
private String face;
private String[] cardSuits;
private String[] cardFaces;
private Random ran;
public Cards() {
ran = new Random();
cardSuits = new String[] { "of Spade", "of Hearts", "of Diamonds",
"of Clubs" };
cardFaces = new String[] { "Ace", "2", "3", "4", "5", "6", "7", "8", "9",
"10", "Jack", "Queen", "King" };
}
public String setPlayerCardSuit() {
suit = cardSuits[ran.nextInt(4)];
return suit;
}
public String setPlayerCardFace() {
face = cardFaces[ran.nextInt(13)];
return face;
}
public String setPlayerCardSuit2() {
suit = cardSuits[ran.nextInt(4)];
return suit;
}
public String setPlayerCardFace2() {
face = cardFaces[ran.nextInt(13)];
return face;
}
public String setCompCardSuit() {
suit = cardSuits[ran.nextInt(4)];
return suit;
}
public String setCompCardFace() {
face = cardFaces[ran.nextInt(13)];
return face;
}
public String setCompCardSuit2() {
suit = cardSuits[ran.nextInt(4)];
return suit;
}
public String setCompCardFace2() {
face = cardFaces[ran.nextInt(13)];
return face;
}
public void getResults() {
System.out.println("Here are your cards: " + setPlayerCardFace() + " "
+ setPlayerCardSuit() + " and " + setPlayerCardFace2() + " "
+ setPlayerCardSuit2());
}
public void getCompCard() {
System.out.println("Here's the computer's cards: " + setCompCardFace()
+ " " + setCompCardSuit() + " and " + setCompCardFace2() + " "
+ setCompCardSuit2());
}
}
下面是测试Cards类的代码:
import javax.swing.JOptionPane;
public class TestCards {
public static void main(String[] args) {
Cards playerCards = new Cards();
Cards computerCards = new Cards();
int confirm, x = 1;
while (x == 1) {
JOptionPane.showMessageDialog(null,
"Random Card game \nPlease press OK to Start Game",
"Card Pair Game", JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(
null,
"Here are your Cards: " + playerCards.setPlayerCardFace()
+ " " + playerCards.setPlayerCardSuit() + " and "
+ playerCards.setPlayerCardFace2() + " "
+ playerCards.setPlayerCardSuit2()
+ "\nThe Computer's Cards are: "
+ computerCards.setCompCardFace() + " "
+ computerCards.setCompCardSuit() + " and "
+ computerCards.setCompCardFace2() + " "
+ computerCards.setCompCardSuit2());
confirm = JOptionPane.showConfirmDialog(null, "Game Ends. Again?",
"Game Over", JOptionPane.YES_NO_OPTION);
if (confirm != JOptionPane.YES_OPTION) {
x = 2;
}
}
}
}
现在缺少的是确定获胜者的代码
我是java编程的初学者。。因此,如果你看到代码的不寻常用法,请耐心听我说:)
我试过迪伦的建议,但似乎无法奏效。。相反,他使用了他的想法,并将此代码添加到Cards类中
public int playerValues(){
int temp = 0;
if(face != cardFaces[0] && face != cardFaces[10] && face != cardFaces[11] && face != cardFaces[12]){
temp = Integer.parseInt(face);
}else if(face == cardFaces[0]){
temp = 1;
}else if(face == cardFaces[10]){
temp = 11;
}else if(face == cardFaces[11]){
temp = 12;
}else if(face == cardFaces[12]){
temp = 13;
}
return temp;
}
public int computerValues(){
int temp = 0;
if(face != cardFaces[0] && face != cardFaces[10] && face != cardFaces[11] && face != cardFaces[12]){
temp = Integer.parseInt(face);
}else if(face == cardFaces[0]){
temp = 1;
}else if(face == cardFaces[10]){
temp = 11;
}else if(face == cardFaces[11]){
temp = 12;
}else if(face == cardFaces[12]){
temp = 13;
}
return temp;
}
你有一个问题,不是所有的卡都是唯一的。两个玩家可以拥有相同的牌。它们甚至都可能是同一张牌 相反,您应该生成所有可能卡片的列表。我建议使用
卡类。使用Collections.shuffle
将其洗牌。这样所有的玩家都会有不同的牌
您需要比较一组卡片的规则。首先用英语定义它们,然后将它们翻译成代码。我真的建议您的卡片是一个类或至少是一个枚举。然后把它们相加就有意义了
另外,请解释这两个
public String setCompCardFace()
public String setCompCardFace2() //identical
你需要的是每个玩家都有一个和你开始时一样的卡片实例
public class Cards extends ArrayList<Card>
您不应该使用字符串数组来保存卡片面,而应该使用CardFace数组,该数组具有名称(用于显示)和值(用于计算面总和)。因为只有13个值,所以它应该是一个枚举:
public enum CardFace {
ACE("Ace, 1),
TWO("2", 2),
...
KINK("King", 13);
private String face;
private int value;
private CardFace(String face, int value) {
this.face = face;
this.value = value;
}
public String getFace() {
return this.face;
}
public int getValue() {
return this.value;
}
}
使用String.parseInt()
方法将返回字符串中的数字。但是,你会和王牌,善良,女王,杰克有问题,因为他们不是一个数字。我建议创建一个声明,如:
if(!cardFaces[x].equals("Ace")&&!cardFaces[x].equals("Queen")&&!cardFaces[x].equals("King")&&!cardFaces[x].equals("Jack"))
{
int temp = cardFaces[x].parseInt();
}
else if(cardFaces[x].equals("Ace")
{
int temp = 1;
}
else if(cardFaces[x].equals("King") || cardFaces[x].equals("Queen") || cardFaces[x].equals("Jack"))
{
int temp = 10;
我通过修改TestCard
类而不是显示字符串数组中的两个随机值,成功地确定了获胜者。我更改了它,使其仅显示数组中的一个值。有了这些,我决定了谁是赢家。似乎没有人谈论过获得组合,所以我将在这里讨论。如果你有什么不明白的地方,可以在这里发表评论
直接齐平-您需要一个for循环。
首先,您应该使用升序(1、2、3、4、5等)对玩家的牌数组进行排序。现在,从第一个条目开始检查,最低的
请注意,阵列卡仅存储输入整数的值
// Variables to store the current and previous cards.
int previous = 0;
int current = 0;
cards = Arrays.sort(cards); // Sort cards into ascending order
boolean straightFlush = false;
for (i = 0; i < cards.length; i++) {
current = cards[i];
if (!current == cards[0]) { // If current is not the first card, execute the rest. You don't want random errors popping up, do you? :)
// Check if it is the last card - a straight flush would then be present
if (current == cards[cards.length - 1]) {
straightFlush = true;
break;
}
// Checks if current - 1 != previous or the current card is not consecutive to the previous card
if (current - 1 != previous) {
break;
}
}
...
//用于存储当前卡和以前卡的变量。
int-previous=0;
int电流=0;
卡片=数组。排序(卡片);//将卡片按升序排序
布尔直插=假;
对于(i=0;i
那么如何比较牌数呢?如果是同花顺的话,在牌中找出最高的值
我很快会发布更多关于这个的信息。你说的“总和”是什么意思对于字符串来说没有什么意义。你是在试图确定2的赢家吗?是的。如果我没有把我的问题说清楚,很抱歉。简而言之。我只是想知道谁赢了这场比赛。你还有一个更大的问题,那就是,在打印出牌的最后,每个玩家只有一张牌的记录。你能提供一个示例代码吗?我是这太新了。正如你所看到的,我是用我目前掌握的java知识编写代码的。这意味着我只能使用初学者学习的代码。请给我时间分析你建议的所有解决方案。我需要一个接一个地检查它们,因为给出的大多数代码对我来说都是新的。我会尝试你建议的这些代码。谢谢你post.我熟悉使用的代码。顺便说一句。我需要将x声明为整数吗?对于cardFaces[x]。等于()x实际上应该是cardFaces等卡片的数字,因为x是数组索引。这意味着cardFaces[0]=“Ace”cardFaces[1]=“2”
,等等。我尝试了你建议的解决方案,但我似乎无法让它工作,而是这样做了。
// Variables to store the current and previous cards.
int previous = 0;
int current = 0;
cards = Arrays.sort(cards); // Sort cards into ascending order
boolean straightFlush = false;
for (i = 0; i < cards.length; i++) {
current = cards[i];
if (!current == cards[0]) { // If current is not the first card, execute the rest. You don't want random errors popping up, do you? :)
// Check if it is the last card - a straight flush would then be present
if (current == cards[cards.length - 1]) {
straightFlush = true;
break;
}
// Checks if current - 1 != previous or the current card is not consecutive to the previous card
if (current - 1 != previous) {
break;
}
}
...