Я думаю, что ваш подход делает это более сложным, чем должно быть.Попробуйте использовать класс с именем card и две коллекции - одну с именем CardsRemaining и другую с именем CardsUsed.
Первоначально CardsRemaining содержит все 52 объекта карты, а CardsUsed пуст.Когда карты добавляются в CardsUsed, они удаляются из CardsRemaining, естественным образом предотвращая возникновение дубликатов.
Ваша программа может в конечном итоге выглядеть примерно так (извините, это на c #):
class Program
{
static void Main(string[] args)
{
List<Card> CardsRemaining=new List<Card>();
for (int i = 0; i < 12; i++)
{
for (int j = 0; j < 4; j++)
{
Card c = new Card(i, j);
CardsRemaining.Add(c);
}
}
List<Card> CardsUsed = new List<Card>();
for(int i=0;i<25;i++)
{
int cardIndex = getRandomNumber(CardsRemaining.Count);
Card c = CardsRemaining[cardIndex];
CardsRemaining.Remove(c);
CardsUsed.Add(c);
}
}
}
class Card
{
public int Number;
public int Color;
public Card(int number, int color)
{
this.Number = number;
this.Color = color;
}
}