选择四张牌并计算他们的总和JAVA

时间:2015-07-26 17:35:07

标签: java

我的计划大部分时间都在进行,但是我已经接近尾声,我很乐意帮助你!

我必须编写一个程序,从52个牌组中选出4张牌并计算总和。 Ace,King,Queen和Jack分别代表1,13,12和11。该程序应显示产生24的总和的选择数。

到目前为止我所拥有的:

public class Exercise07_29 {
    public static void main(String[] args){

        //initialize everything
         int[] deck = new int[52];
         String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"};
         String[] ranks = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};

         //initialize the cards
         for(int i = 0; i< deck.length; i ++)
             deck[i] = i;

         //shuffle the cards
         for(int i = 0; i < deck.length; i++){

             //generate an index randomly
             int index = (int)(Math.random() * deck.length);
             int temp = deck[i];
             deck[i] = deck[index];
             deck[index] = temp;
         }

         //display the four cards
         for(int i = 0; i < 4; i++){
             String suit = suits[deck[i] / 13];
             String rank = ranks[deck[i] % 13];
             System.out.println(rank + " of " + suit);
         }
         //initialize Ace Jack Queen King
         int Ace, Jack, Queen, King;

         //Assign a point vale to each
         int[] points = {Ace = 1, Jack = 11, Queen = 12, King = 13};

        //add the cards together and show output

    }
}

我尝试了一个循环添加,但是在添加随机输出时遇到了麻烦......

任何和所有帮助将不胜感激! :)

3 个答案:

答案 0 :(得分:1)

import java.util.*;


public class Exercise07_29 {
    public static void main(String[] args){

        //initialize everything
        int[] deck = new int[52];
        String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"};
        String[] ranks = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};
        List<String> pickedCards = new ArrayList<String>();

        //initialize the cards
        for(int i = 0; i< deck.length; i ++)
            deck[i] = i;

        //shuffle the cards
        for(int i = 0; i < deck.length; i++){

            //generate an index randomly
            int index = (int)(Math.random() * deck.length);
            int temp = deck[i];
            deck[i] = deck[index];
            deck[index] = temp;
        }

        //display the four cards
        for(int i = 0; i < 4; i++){
            String suit = suits[deck[i] / 13];
            String rank = ranks[deck[i] % 13];
            System.out.println(rank + " of " + suit);
            pickedCards.add(rank);
        }

        //initialize Ace Jack Queen King
        int Ace, Jack, Queen, King;

        //Assign a point vale to each
        int[] points = {Ace = 1, Jack = 11, Queen = 12, King = 13};

        //add the cards together and show output
        int sum = 0;
        int jack = 11;
        int queen = 12;
        int king = 13;
        int ace = 1;
        Iterator<String> iterator = pickedCards.iterator();
        while(iterator.hasNext()) {

            String rank = iterator.next();
            System.out.println(rank);
            if(rank.equalsIgnoreCase("Jack")){
            sum = sum+jack;
        }
        else if(rank.equalsIgnoreCase("Queen")){
            sum = sum+queen;
        }
        else if(rank.equalsIgnoreCase("King")){
            sum = sum+king;
        }
        else if(rank.equalsIgnoreCase("Ace")){
            sum = sum+ace;
        } 
        else {
            sum = sum+Integer.parseInt(rank);
        }
    }
    System.out.println("Sum of picked cards is : "+sum);
}

}

答案 1 :(得分:0)

我不确定你的问题是什么。如果您想知道如何将Ace,Jack,Queen和King映射到积分,那么我会建议如下。

in

然后,如果您需要打印文本,只需在地图中搜索数字,如果有条目打印,则打印您的数字。

作为此变体,您可以创建包含卡片及其字符串表示的分类卡,并使用此卡填充地图。

例如:

Map<Integer, String> cardToPoints = new HashMap<Integer, String>();
cardToPoints.add(1, "Ace");
cardToPoints.add(11, "Jack");
cardToPoints.add(12, "Queen");
cardToPoints.add(13, "King");

然后只需从地图上获取积分即可获得积分并打印精确的卡片。简单而干净(地图启动的52个条目除外);

答案 2 :(得分:0)

Java是一种面向对象的语言。你可能是一个初学者,但这里有一个让你思考的例子。

package cards;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * Exercise07_29
 * @author Michael
 * @link  https://stackoverflow.com/questions/31639964/pick-four-cards-and-compute-their-sum-java
 * @since 7/26/2015 1:42 PM
 */
public class Exercise07_29 {

    public static final int NUM_CARDS = 4;

    public static void main(String[] args) {
        Deck deck = new Deck();
        List<Card> hand = new ArrayList<>();
        int score = 0;
        for (int i = 0; i < NUM_CARDS; ++i) {
            Card card = deck.deal();
            hand.add(card);
            score += card.getRank().getValue();
        }
        System.out.println(hand);
        System.out.println(score);
    }
}


enum SUIT {
    CLUB, DIAMOND, HEART, SPADE;
}

enum RANK {
    ACE(1), TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(9), TEN(10), JACK(11), QUEEN(12), KING(13);

    private final int value;

    RANK(int value) { this.value = value; }

    public int getValue() {
        return value;
    }
}

class Card implements Comparable<Card> {
    private final SUIT suit;
    private final RANK rank;

    public Card(SUIT suit, RANK rank) {
        if (suit == null) throw new IllegalArgumentException("suit cannot be null");
        if (rank == null) throw new IllegalArgumentException("rank cannot be null");
        this.suit = suit;
        this.rank = rank;
    }

    public SUIT getSuit() {
        return suit;
    }

    public RANK getRank() {
        return rank;
    }

    @Override
    public int compareTo(Card other) {
        if (this.getRank().equals(other.getRank())) {
            return this.getSuit().compareTo(other.getSuit());
        } else {
            return this.getRank().getValue() - other.getRank().getValue();
        }
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Card card = (Card) o;

        return suit == card.suit && rank == card.rank;
    }

    @Override
    public int hashCode() {
        int result = suit.hashCode();
        result = 31 * result + rank.hashCode();
        return result;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("Card{");
        sb.append("suit=").append(suit);
        sb.append(", rank=").append(rank);
        sb.append('}');
        return sb.toString();
    }
}

class Deck {
    private List<Card> deck;
    private Random random;

    public Deck() {
        this.init();
        this.random = new Random();
    }

    public Deck(long seed) {
        this.init();
        this.random = new Random(seed);
    }

    private void init() {
        this.deck = new ArrayList<Card>();
        for (SUIT suit: SUIT.values()) {
            for (RANK rank: RANK.values()) {
                this.deck.add(new Card(suit, rank));
            }
        }
    }

    public Card deal() { return this.deal(true); }

    public Card deal(boolean removeCard) {
        int value = this.random.nextInt(this.deck.size());
        return removeCard ? this.deck.remove(value) : this.deck.get(value);
    }

}