title: Designing a deck of cards using a linked list
body: <p>The objective of this program is to design a deck of cards using a linked list.
  My codes does not print anything out when it runs.
  Heres my code below </p>
  
  <p>Node Class:</p>
  
  <pre><code>public class Node
  {
  private Comparable data;
  private Node next;
  public Node()
  {
  next = null;
  }
  public Node(Comparable c)
  {
  data = c;
  next = null;
  }
  public Node(Comparable c, Node n)
  {
  data = c;
  next = n;
  }
  public Comparable getData()
  {
  return data;
  }
  public void setData(Comparable c)
  {
  data = c;
  }
  public Node getNext()
  {
  return next;
  }
  public void setNext(Node n)
  {
  next = n;
  }
  
  }
  </code></pre>
  
  <p>LinkedList class:</p>
  
  <pre><code>public class LinkedList
  {
  private Node first = null;
  private Node current = null;
  private Node pre = null;
  public boolean isEmpty()
  {
  return true;
  }
  public boolean contains(Comparable item)
  {
  current = first;
  pre = null;
  while ((current != null)&amp;&amp;(current.getData().compareTo(item) &lt; 0))
  {
  pre = current;
  current = current.getNext();
  }
  return ((current != null) &amp;&amp; (current.getData().compareTo(item) == 0));
  }
  public int size()
  {
  int count = 0;
  current = first;
  pre = null;
  while (current != null)
  {
  pre = current;
  current = current.getNext();
  count++;
  }
  return count;
  
  }
  public void add(Comparable c)
  {
  
  Node temp = new Node(c);
  if (pre == null)
  {
  first = temp;
  }
  else
  {
  pre.setNext(temp);
  }
  temp.setNext(current);
  current = temp;
  }
  public void remove(Comparable c)
  {
  if (pre == null)
  {
  first = first.getNext();
  }
  else
  {
  current = current.getNext();
  if (pre == null)
  {
  first = current;
  }
  else
  {
  pre.setNext(current);
  }
  
  }
  
  }
  public void clear()
  {
  first = null;
  }
  public void print()
  {
  Node current = first;
  while (current != null)
  {
  System.out.println(current.getData());
  current = current.getNext();
  }
  }
  }
  </code></pre>
  
  <p>Card class:</p>
  
  <pre><code>public class Card implements Comparable&lt;Card&gt;
  {
  private int rank;
  private int suit;
  public Card(int suit, int rank)
  {
  this.rank = rank;
  this.suit = suit;
  }
  public int getRank()
  {
  return rank;
  }
  public int getSuit()
  {
  return suit;
  }
  public String toString()
  {
  switch(suit)
  {
  case 1:
  switch(rank)
  {
  case 11: return "Jack of Hearts";
  case 12: return "Queen of Hearts";
  case 13: return "King of Hearts";
  case 14: return "Ace of Hearts";
  default: return rank + " of Hearts";
  }
  
  case 2:
  switch(rank)
  {
  case 11: return "Jack of Diamonds";
  case 12: return "Queen of Diamonds";
  case 13: return "King of Diamonds";
  case 14: return "Ace of Diamonds";
  default: return rank + " of Diamonds";
  }
  case 3:
  switch(rank)
  {
  case 11: return "Jack of Clubs";
  case 12: return "Queen of Clubs";
  case 13: return "King of Clubs";
  case 14: return "Ace of Clubs";
  default: return rank + " of Clubs";
  }
  case 4:
  switch(rank)
  {
  case 11: return "Jack of Spades";
  case 12: return "Queen of Spades";
  case 13: return "King of Spades";
  case 14: return "Ace of Spades";
  default: return rank + " of Spades";
  }
  }
  return null;
  }
  public int compareTo(Card a)
  {
  if (this.rank &lt; a.rank)
  {
  return -1;
  }
  if (this.rank &gt; a.rank)
  {
  return 1;
  }
  if (this.rank == a.rank)
  {
  if (this.suit &lt; a.suit)
  {   
  return -1;
  }
  if (this.suit &gt; a.suit)
  {
  return 1;
  }
  }
  
  return 0;
  }
  }
  </code></pre>
  
  <p>CardDeck class - a linked list of card:</p>
  
  <pre><code>import java.util.Random;
  
  public class CardDeck
  {
  private LinkedList cards;
  private int numCards;
  public void Deck()
  {
  for (int a = 1; a &lt;= 4; a++)
  {
  for (int b = 1; b &lt;= 14; b++)
  {
  cards.add(new Card(a,B)/&gt;);
  }
  }
  }
  
  public void drawFromDeck()
  {
  Random rand = new Random();
  int index = rand.nextInt(cards.size());
  cards.remove(index);
  numCards--;
  }
  public int getTotalCard()
  {
  return cards.size();
  }
  }
  </code></pre>
  
  <p>Main class:</p>
  
  <pre><code>public class Main
  {
  public static void main(String[] args)
  {
  LinkedList myList = new LinkedList();
  CardDeck myCards = new CardDeck();
  myCards.Deck();
  myList.print();
  }
  </code></pre>