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

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

11.02.2023, 15:13. Показов 1412. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане! Помогите пожалуйста новичку. Формирую колоду карт (1-4) - масти (6-14) - тип.
Код такой

C#
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
        List<int> numbers = new List<int>() { 1, 2, 3, 4 };//масть
        List<string> typeK1 = new List<string>() { " 6", " 7", " 8", " 9", "10", " В", " Д", " К", " Т" };//тип-достоинство
        List<int> typeK = new List<int>() { 6, 7, 8, 9, 10, 11, 12, 13, 14 };//тип-достоинство в цифрах        
 
        public void  kards() {
            //создаем колоду карт
            int k = 0;
            List<int[]> typeMast = new List<int[]>();
            int[] oneKard=new int[2];
            foreach (var n in numbers)
            {
                foreach (var t in typeK)
                {
                    k++;                   
                    oneKard[0] = n;                    
                    oneKard[1] = t;                                       
                    typeMast.Add(oneKard);
                }
            }
            int r;
            foreach(var tM in typeMast)
            {
                Console.WriteLine(tM[0] + " " + tM[1]);
                Console.ReadLine();
 
            }
Выдает одни и те же значения. Как решить проблему?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2023, 15:13
Ответы с готовыми решениями:

Тасование колоды карт
Ребят такие проблемы - написал программку которая тасует и сдает колоду карт на С#: чувствую, что-то как-то громоздко получилось - если...

Напишите программу, имитирующую выбор карты из колоды из 52-х карт
Напишите программу, имитирующую выбор карты из колоды из 52-х карт. Ваша программа должна выбрать ранг (Туз, 2, 3, 4, 5, 6, 7, 8, 9, 10,...

Создание колоды карт 52
создать колоду карт 52 Значение: {&quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;5&quot;, &quot;6&quot;, &quot;7&quot;, &quot;8&quot;, &quot;9&quot;, &quot;10&quot;, &quot;J&quot;, &quot;Q&quot;, &quot;K&quot;, &quot;A&quot;} Масть: Hearts, Tiles, Cloves,...

5
77 / 50 / 29
Регистрация: 21.10.2022
Сообщений: 114
11.02.2023, 16:10
int[] oneKard = new int[2]; Это ссылочный тип, и в typeMast будет последнее значение у всех. Перенесите инициализацию oneKard во внутренний foreach .
2
22 / 17 / 5
Регистрация: 03.03.2022
Сообщений: 77
11.02.2023, 16:13
Лучший ответ Сообщение было отмечено ShNik как решение

Решение

Цитата Сообщение от ShNik Посмотреть сообщение
Выдает одни и те же значения. Как решить проблему?
Привет, была похожая проблема
При добавлении в List<> идет перезапись старых значений
У тебя в коде используется один и тот же массив, и ты этот массив закладываешь в список при первой итерации вложенного цикла, при второй итерации ты изменяешь значения элементов в массиве и элементы меняются и в списке массива... В общем, можно сказать, что ты 36 раз добавляешь один и тот же массив в список с одними и теми же значениями в элементах. Можно это обойти следующий образом
Перед внешним циклом оставь объявление массива, а в начале вложенного цикла напиши инициализацию массива, то есть
C#
1
2
3
4
5
6
7
8
foreach (var t in typeK)
                {
                    oneKard=new int[2];
                    k++;                   
                    oneKard[0] = n;                    
                    oneKard[1] = t;                                       
                    typeMast.Add(oneKard);
                }
Думаю, есть более грамотный способ решения, как по мне инициализировать каждый раз массив в цикле - такое себе...
2
0 / 0 / 0
Регистрация: 05.02.2023
Сообщений: 16
11.02.2023, 16:36  [ТС]
Спасибо вам, люди добрые! Заработало. Понимаю, что пишу пока не на знаниях, а на интуиции. Нужно больше практики.
0
 Аватар для roach1967
983 / 463 / 233
Регистрация: 27.06.2014
Сообщений: 1,033
12.02.2023, 10:31
Лучший ответ Сообщение было отмечено ShNik как решение

Решение

А если использовать два младших разряда байта для масти, а остальные разряды для достоинства. Всё становится намного проще:
C#
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
using System;
using System.Collections.Generic;
 
namespace ConsoleApp18
{
    internal class Program
    {
        private static readonly char[] suits = { '♣', '♦', '♥', '♠' };
        private static readonly string[] values = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
        private static List<Card> cards = new List<Card>();
 
        static void Main(string[] args)
        {
            Kards();
            Console.WriteLine(string.Join(", ", cards));
            Console.ReadLine();
        }
 
        public static void Kards()
        {
            for (int i = 0; i < suits.Length; i++)
            {
                for (int j = 0; j < values.Length; j++)
                {
                    cards.Add(new Card(i, j));
                }
            }
        }
 
        public class Card
        {
            private byte card;
 
            public Card(int suit, int value)
            {
                card = (byte)(value * 4 + (suit & 0x03));
            }
 
            public override string ToString()
            {
                return suits[card & 0x03] + values[card / 4];
            }
        }
    }
}
Результат:
Code
1
2
♣A, ♣2, ♣3, ♣4, ♣5, ♣6, ♣7, ♣8, ♣9, ♣10, ♣J, ♣Q, ♣K, ♦A, ♦2, ♦3, ♦4, ♦5, ♦6, ♦7, ♦8, ♦9, ♦10, ♦J, ♦Q, ♦K, ♥A, ♥2, ♥3, ♥4
, ♥5, ♥6, ♥7, ♥8, ♥9, ♥10, ♥J, ♥Q, ♥K, ♠A, ♠2, ♠3, ♠4, ♠5, ♠6, ♠7, ♠8, ♠9, ♠10, ♠J, ♠Q, ♠K
2
0 / 0 / 0
Регистрация: 05.02.2023
Сообщений: 16
15.02.2023, 19:51  [ТС]
Добавлено через 2 минуты
Спасибо огромное!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.02.2023, 19:51
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
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
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru