Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 23.10.2022
Сообщений: 10

Создание колоды карт 52

26.11.2022, 19:52. Показов 1627. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
создать колоду карт 52
Значение: {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"}
Масть: Hearts, Tiles, Cloves, Pikes
Взять карту из колоды (при этом нужно обеспечить, что из колоды нельзя вытащить две одинаковые карты)
Вернуть карту в колоду (при этом нужно обеспечить, что в колоду нельзя вернуть карту, которая там уже есть)
я смог только вывести все 52 карты но как взять я не знаю возможно неправильно создавал 52 карта

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Card {
 
    private Numerals numerals;
    private Suits suits;
 
    public Card (Numerals numerals, Suits suits) {
        this.numerals = numerals;
        this.suits = suits;
    }
 
    public Numerals getNumerals() {
        return numerals;
    }
 
    public Suits getSuits() {
        return suits;
    }
    public String toString() {
        return "[" + numerals + ":" + suits + "]";
    }
 
    enum Numerals {        deuce, three, four, five, six, seven, eight, nine, ten, jack, queen, king, ace;
    }
 
    enum Suits {
        hearts, clubs, diamonds, spades
    }
 
    public static void display(Numerals value, Suits suit) {
        System.out.println(value + " " + suit);
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Main {
    public static void main(String[] args) {
 
        Card.Numerals[] numerals = Card.Numerals.values();
        Card.Suits[] suits = Card.Suits.values();
 
        Card[] cards = new Card[numerals.length * suits.length];
 
        int i = 0;
        for (Card.Numerals numerals1 : numerals) {
            for (Card.Suits suits1 : suits) {
                cards[i++] = new Card(numerals1, suits1);
            }
        }
 
        for (Card numeralSuit : cards) {
            System.out.println(numeralSuit);
        }
    }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.11.2022, 19:52
Ответы с готовыми решениями:

Сортировка колоды карт
Сортировка колоды. Поясните, как бы вы упорядочили колоду карт по мастям (в порядке пики, червы, трефы, бубны) и по старшинству в каждой...

Генерация колоды карт с использованием двух enum
Приветствую! Нужна помощь, в генерации и выводе колоды карт с помощью enum. Задача заключается звучит так.. 1) Нужно сделать класс Karta...

Создание онлайн редактора карт
Здравствуйте, товарищи! Недавно у меня появилась идея в целях закрепления Java core и обучению Spring написать какой-нибудь веб-проект. Так...

7
2487 / 1151 / 709
Регистрация: 25.04.2016
Сообщений: 3,315
27.11.2022, 02:11
Лучший ответ Сообщение было отмечено orozbai233 как решение

Решение

Suit.java
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public enum Suit {
    HEARTS("Черви", '♥'),
    DIAMONDS("Бубны", '♦'),
    CLUBS("Трефы", '♣'),
    SPADES("Пики", '♠');
 
    private String name;
    private char mark;
 
    Suit(String name, char mark) {
        this.name = name;
        this.mark = mark;
    }
 
    public String getName() {
        return name;
    }
 
    public char getMark() {
        return mark;
    }
}


Card.java
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class Card {
    private Suit suit;          // масть
    private String value;       // значение
    private int code;           // вес
 
    private int setCode() {
        String[] codes = { "2", "3", "4", "5", "6", "7", "8",
                            "9", "10", "J", "Q", "K", "A" };
        int result = 0;
        for (int i = 0; i < codes.length; i++)
            if ( value.equals(codes[i]) )
                result = i + 2;
        return result;
    }
 
    Card(Suit suit, String value) {
        this.suit = suit;
        this.value = value;
        code = setCode();
    }
 
    public Suit getSuit() {
        return suit;
    }
 
    public String getValue() {
        return value;
    }
 
    public int getCode() {
        return code;
    }
 
    @Override
    public String toString() {
        return String.format("%s%c", value, suit.getMark());
    }
}


MyProg.java
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import java.util.Random;
import java.util.ArrayList;
 
public class MyProg {
    private static String[] codes = { "2", "3", "4", "5", "6", "7", "8",
                                        "9", "10", "J", "Q", "K", "A" };
    private static Random rnd;
 
    public static void main(String[] args) {
        rnd = new Random( System.currentTimeMillis() );
        ArrayList<Card> cards = new ArrayList<>();
        Suit[] suits = Suit.values();
 
        for (int i = 0; i < codes.length; i++)
            for (Suit s : suits)
                cards.add( new Card(s, codes[i]) );
 
        printCards(cards);
        System.out.println();
 
        Card a = getCardFrom(cards);
        printCards(cards);
        System.out.println();
 
        Card b = getCardFrom(cards, a);
 
        putCardIn(cards, a);
        printCards(cards);
        System.out.println();
 
        putCardIn(cards, a);
 
        putCardIn(cards, b);
        printCards(cards);
    }
 
    // выводит колоду карт на экран
    private static void printCards(ArrayList<Card> cards) {
        System.out.println("Текущая колода:");
        for (int i = 0, k = 0; i < cards.size(); i++) {
            System.out.printf("%4s", cards.get(i));
            if (++k % 16 == 0) {
                System.out.println();
                k = 0;
            }
        }
        System.out.println();
    }
 
    // достает случайную карту из колоды
    private static Card getCardFrom(ArrayList<Card> cards) {
        int position = rnd.nextInt( cards.size() );
        Card card = cards.get(position);
        cards.remove(position);
        System.out.printf("Вытащили из колоды карту %s\n\n", card);
        return card;
    }
 
    // достает заданную карту из колоды
    private static Card getCardFrom(ArrayList<Card> cards, Card card) {
        int position = cards.indexOf(card);
        if (position < 0) {
            System.out.printf("Не могу достать карту %s." +
                                " Такой карты нет в колоде!\n\n", card);
            return null;
        }
        Card result = cards.get(position);
        cards.remove(position);
        System.out.printf("Вытащили из колоды карту %s\n\n", result);
        return result;
    }
 
    // кладет карту в колоду
    private static void putCardIn(ArrayList<Card> cards, Card card) {
        if (card == null)
            System.out.println("Невозможно положить в колоду null!\n");
        else if ( !cards.contains(card) ) {
            cards.add(card);
            System.out.printf("Положили в колоду карту %s\n\n", card);
        }
        else
            System.out.printf("Карта %s уже есть в колоде!\n\n", card);
    }
}


Пример запуска:

Текущая колода:
2♥ 2♦ 2♣ 2♠ 3♥ 3♦ 3♣ 3♠ 4♥ 4♦ 4♣ 4♠ 5♥ 5♦ 5♣ 5♠
6♥ 6♦ 6♣ 6♠ 7♥ 7♦ 7♣ 7♠ 8♥ 8♦ 8♣ 8♠ 9♥ 9♦ 9♣ 9♠
10♥ 10♦ 10♣ 10♠ J♥ J♦ J♣ J♠ Q♥ Q♦ Q♣ Q♠ K♥ K♦ K♣ K♠
A♥ A♦ A♣ A♠

Вытащили из колоды карту J♣

Текущая колода:
2♥ 2♦ 2♣ 2♠ 3♥ 3♦ 3♣ 3♠ 4♥ 4♦ 4♣ 4♠ 5♥ 5♦ 5♣ 5♠
6♥ 6♦ 6♣ 6♠ 7♥ 7♦ 7♣ 7♠ 8♥ 8♦ 8♣ 8♠ 9♥ 9♦ 9♣ 9♠
10♥ 10♦ 10♣ 10♠ J♥ J♦ J♠ Q♥ Q♦ Q♣ Q♠ K♥ K♦ K♣ K♠ A♥
A♦ A♣ A♠

Не могу достать карту J♣. Такой карты нет в колоде!

Положили в колоду карту J♣

Текущая колода:
2♥ 2♦ 2♣ 2♠ 3♥ 3♦ 3♣ 3♠ 4♥ 4♦ 4♣ 4♠ 5♥ 5♦ 5♣ 5♠
6♥ 6♦ 6♣ 6♠ 7♥ 7♦ 7♣ 7♠ 8♥ 8♦ 8♣ 8♠ 9♥ 9♦ 9♣ 9♠
10♥ 10♦ 10♣ 10♠ J♥ J♦ J♠ Q♥ Q♦ Q♣ Q♠ K♥ K♦ K♣ K♠ A♥
A♦ A♣ A♠ J♣

Карта J♣ уже есть в колоде!

Невозможно положить в колоду null!

Текущая колода:
2♥ 2♦ 2♣ 2♠ 3♥ 3♦ 3♣ 3♠ 4♥ 4♦ 4♣ 4♠ 5♥ 5♦ 5♣ 5♠
6♥ 6♦ 6♣ 6♠ 7♥ 7♦ 7♣ 7♠ 8♥ 8♦ 8♣ 8♠ 9♥ 9♦ 9♣ 9♠
10♥ 10♦ 10♣ 10♠ J♥ J♦ J♠ Q♥ Q♦ Q♣ Q♠ K♥ K♦ K♣ K♠ A♥
A♦ A♣ A♠ J♣

Добавлено через 6 минут
Если у вас проблемы с выводом символов utf-8 в консоль, то в Card.java замените 36 строку на

return String.format("%s %s", value, suit.getName());

а в MyProg.java измените вывод колоды, увеличив длину выводимой строки. А также подкорректируйте переносы строк под размеры своего терминала.
1
1 / 1 / 0
Регистрация: 23.10.2022
Сообщений: 10
27.11.2022, 21:34  [ТС]
если я хочу перемешать колоду что мне использовать? cards.lenght не пишеться
0
2487 / 1151 / 709
Регистрация: 25.04.2016
Сообщений: 3,315
28.11.2022, 11:34
orozbai233, попробуйте cards.size(). А вообще рекомендую почитать на досуге.

Доступ к элементу списка производится через cards.get(int index); Замена элемента - через cards.set(int index, E element) и так далее.

Если проводить аналогию с массивами, то cards.get(int index) - это cards[index], а cards.set(int index, E element) - это cards[index] = element;

Для перемешивания колоды может пригодиться Collections.shuffle(ArrayList) Или, например, алгоритм тасования Фишера-Йетса, если хочется написать свою реализацию.

В качестве примера:

Suit.java
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public enum Suit {
    HEARTS("Черви", '♥'),
    DIAMONDS("Бубны", '♦'),
    CLUBS("Трефы", '♣'),
    SPADES("Пики", '♠');
 
    private String name;
    private char mark;
 
    Suit(String name, char mark) {
        this.name = name;
        this.mark = mark;
    }
 
    public String getName() {
        return name;
    }
 
    public char getMark() {
        return mark;
    }
}


Card.java
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class Card {
    private Suit suit;          // масть
    private String value;       // значение
    private int weight;         // вес
 
    Card(Suit suit, String value, int weight) {
        this.suit = suit;
        this.value = value;
        this.weight = weight;
    }
 
    public Suit getSuit() {
        return suit;
    }
 
    public String getValue() {
        return value;
    }
 
    public int getWeight() {
        return weight;
    }
 
    @Override
    public String toString() {
        return String.format("%s%c", value, suit.getMark());
    }
}


MyProg.java
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import java.util.Random;
import java.util.ArrayList;
import java.util.Collections;
 
public class MyProg {
    private static String[] codes = { "2", "3", "4", "5", "6", "7", "8",
                                        "9", "10", "J", "Q", "K", "A" };
    private static Random rnd;
 
    public static void main(String[] args) {
        rnd = new Random( System.currentTimeMillis() );
        ArrayList<Card> cards = new ArrayList<>();
        Suit[] suits = Suit.values();
 
        for (int i = 0; i < codes.length; i++)
            for (Suit s : suits)
                cards.add( new Card(s, codes[i], i + 2) );
 
        printCards(cards);
        System.out.println();
 
        Card a = getCardFrom(cards);
        printCards(cards);
        System.out.println();
 
        Card b = getCardFrom(cards, a);
 
        putCardIn(cards, a);
        printCards(cards);
        System.out.println();
 
        putCardIn(cards, a);
 
        putCardIn(cards, b);
        printCards(cards);
        System.out.println();
 
        System.out.println("Колода перетасована\n");
        Collections.shuffle(cards);
        printCards(cards);
    }
 
    // выводит колоду карт на экран
    private static void printCards(ArrayList<Card> cards) {
        System.out.println("Текущая колода:");
        for (int i = 0, k = 0; i < cards.size(); i++) {
            System.out.printf("%4s", cards.get(i));
            if (++k % 16 == 0) {
                System.out.println();
                k = 0;
            }
        }
        System.out.println();
    }
 
    // достает случайную карту из колоды
    private static Card getCardFrom(ArrayList<Card> cards) {
        int position = rnd.nextInt( cards.size() );
        Card card = cards.get(position);
        cards.remove(position);
        System.out.printf("Вытащили из колоды карту %s\n\n", card);
        return card;
    }
 
    // достает заданную карту из колоды
    private static Card getCardFrom(ArrayList<Card> cards, Card card) {
        int position = cards.indexOf(card);
        if (position < 0) {
            System.out.printf("Не могу достать карту %s." +
                                " Такой карты нет в колоде!\n\n", card);
            return null;
        }
        Card result = cards.get(position);
        cards.remove(position);
        System.out.printf("Вытащили из колоды карту %s\n\n", result);
        return result;
    }
 
    // кладет карту в колоду
    private static void putCardIn(ArrayList<Card> cards, Card card) {
        if (card == null)
            System.out.println("Невозможно положить в колоду null!\n");
        else if ( !cards.contains(card) ) {
            cards.add(card);
            System.out.printf("Положили в колоду карту %s\n\n", card);
        }
        else
            System.out.printf("Карта %s уже есть в колоде!\n\n", card);
    }
}
1
1 / 1 / 0
Регистрация: 23.10.2022
Сообщений: 10
29.11.2022, 10:38  [ТС]
у меня возник вопрос, допустим у меня в руке есть 5 карт массив с 5 картами

как я могу заменить карты по индексу. например 0 1 4 и заменяет соответственно 0 1 4 карту

Java
1
2
3
4
5
6
7
8
9
static ArrayList<Card> arrayCard = new ArrayList<>();
    public static void handCard(){
    arrayCard.add(takeCard());
    arrayCard.add(takeCard());
    arrayCard.add(takeCard());
    arrayCard.add(takeCard());
    arrayCard.add(takeCard());
 
}
0
0 / 0 / 0
Регистрация: 29.11.2022
Сообщений: 4
29.11.2022, 12:23
orozbai233, Можете подсказать в чем проблема компиляции у меня? Ну не могу понять. Помогите пожалуйста.
Миниатюры
Создание колоды карт 52   Создание колоды карт 52  
0
1 / 1 / 0
Регистрация: 23.10.2022
Сообщений: 10
29.11.2022, 12:26  [ТС]
я уже понял как это сделать

Добавлено через 1 минуту
попробуйте на стороннем сайте ввести ваш код и узнать ошибки. я еще новичек в java
0
2487 / 1151 / 709
Регистрация: 25.04.2016
Сообщений: 3,315
29.11.2022, 15:12
Цитата Сообщение от orozbai233 Посмотреть сообщение
как я могу заменить карты по индексу
Цитата Сообщение от stake-k26 Посмотреть сообщение
Замена элемента - через cards.set(int index, E element)
Моя вас не понимать, читать вы уметь не?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.11.2022, 15:12
Помогаю со студенческими работами здесь

BlackJack создание карт
Есть два перечисления public enum Suit { Clubs,Diamonds,Spades,Hearts } public enum Card { TWO,THREE,FOUR,FIVE,SIX, ...

Создание колоды из 24 карт
добрый день, нужно создать колоду из 24 карт, состоящих из 9,10, валета,дамы, короля и туза. выводит только 9-12, подскажите пожалуйста в...

Сколькими способами можно из колоды игральных карт (36 карт) раздать двум игрокам по шесть карт?
Задача на комбинаторику с подвохом Сколькими способами можно из колоды игральных карт (36 карт) раздать двум игрокам по шесть карт...

Из колоды карт (36 карт) наудачу берут пять карт
Здравствуйте! С теорией вероятностей всегда имел проблему, не могу никак сообразить. Задание такое: Из колоды карт (36 карт) наудачу...

Сколькими способами из колоды в 36 карт можно вытащить неупорядоченный набор из 5 карт
Сколькими способами из колоды в 36 карт можно вытащить неупорядоченный набор из 5 карт так, чтобы в наборе точно было б: 2 карты черной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru