title: Program executing and stops for no reason
body: <p>so I made a poker game for my assignment.<br>
  It all works fine (at least I believe so). To make it simple : The player has a 100$ balance and based on his hand, wins or loses money.<br>
    I made a condition that the game keeps giving the player a new hand as long as his balance is higher than &lt;0> .<br>
   However, after 7 or 8 restarts, the program just shows white and it keeps running forever no matter what you type in ...  </p>
  
  <p>Here is the code hoping you guys can help, also, sorry if most of the code is in French, I commented the methods in English to help you understand :</p>
  
  <pre><code>package pkgtp2;
  
  import java.util.*;
  
  public class TP2 {
  
  static boolean straight;
  static boolean flush;
  static int paires;
  static int gains;
  static int balance = 100;
  static char[] cardsSymbols = new char[5];
  static String[] cardsValues = new String[5];
  static int hand[] = new int[5];
  static boolean pack[] = new boolean[52];
  
  public static void menu(int gains) {
      System.out.println("**************            " + " AUCUNE COMBINAISON = -10$");
      System.out.println("*Jeu de Poker*            " + " 1 PAIRE = 0$");
      System.out.println("**************            " + " 2 PAIRES = 20$");
      System.out.println("                          " + " BRELAN &lt;3&gt; = 35$");
      System.out.println("                          " + " SUITE = 50$");
      System.out.println("                          " + " FULL = 75$");
      System.out.println("                          " + " COULEUR = 100$");
      System.out.println("                          " + " CARRÉ = 150$");
      System.out.println("                          " + " STRAIGHT FLUSH = 500$");
  } // The Game Menu showing every possible hand
  
  public static void drawCards(int[] hand, boolean[] pack) {
  
      Random give = new Random();
  
      for (int i = 0; i &lt; hand.length; i++) {
          do {
              hand[i] = give.nextInt(52);
          } while (pack[hand[i]]);
          pack[hand[i]] = true;
      }
  } // Gives the user 5 unique random numbers
  
  public static void cardSymbol(int[] cards, char[] cardssymbols) {
      char symboles[] = {'♥', '♦', '♣', '♠'};
      int numOfSymbol;
      for (int i = 0; i &lt; cards.length; i++) {
          numOfSymbol = cards[i] / 13;
          cardsSymbols[i] = symboles[numOfSymbol];
      }
  
  } // Converts the 5 numbers into values
  
  public static void cardValue(int[] cards, String[] cardsvalues) {
      String valeurs[] = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
      int numOfValues;
      for (int i = 0; i &lt; cards.length; i++) {
          numOfValues = cards[i] % 13;
          cardsValues[i] = valeurs[numOfValues];
      }
  } // Converts the 5 numbers into actual cards values
  
  public static void printCards(char[] cardsymbols, String[] cardsvalues) {
      System.out.println("Voici vos cartes : \n");
      for (int i = 0; i &lt; hand.length; i++) {
          System.out.print(cardsymbols[i]);
          System.out.print(cardsvalues[i] + "   ");
      }
  } // Prints the Cards
  
  public static void changeCards(int[] cards, boolean[] pack) {
      Scanner read = new Scanner(System.in);
      int cardchange = 0;
      Random give = new Random();
      System.out.println();
  
      for (int i = 0; i &lt; 4; i++) {
          do {
              System.out.println(" Entrez des chiffres de 1 à 5 correspondant aux cartes que vous désirez changer (vous pouvez changer au plus 4 cartes)"
                      + " \n Si vous voulez conserver vos cartes, entrez 0 ");
              while (!read.hasNextInt()) {
                  System.out.println("Veuillez entrer un chiffre ");
                  read.next();
              }
              cardchange = read.nextInt();
          } while (cardchange &lt; 0 || cardchange &gt; 5);
  
          if (cardchange == 0) {
              i = 5;
          } else {
              System.out.print("\nLa carte  " + cardchange + " va être changée\n ");
              do {
                  cards[cardchange - 1] = give.nextInt(52);
              } while (pack[cards[cardchange - 1]]);
              pack[cards[cardchange - 1]] = true;
          }
  
          cardSymbol(cards, cardsSymbols);
          cardValue(cards, cardsValues);
          printCards(cardsSymbols, cardsValues);
  
      }
  
  } // Lets the user change up to 4 cards, press 0 to not change any card and skip
  
  public static int checkPairs(char[] cardsSymbols, String[] cardsvalues) {
      int paires = 0;
      for (int i = 0; i &lt; cardsvalues.length; i++) {
          for (int j = i + 1; j &lt; cardsvalues.length; j++) {
              if (cardsvalues[i].equals(cardsvalues[j])) {
                  paires++;
              }
          }
      }
      return paires;
  } // Checks if the cards values match so the program can determine if the user has a pair, two pair, three of a kind, full house or quads
  
  public static boolean checkFlush(char[] cardsSymbols) {
      boolean flush = false;
      if (cardsSymbols[0] == cardsSymbols[1] &amp;&amp; cardsSymbols[1] == cardsSymbols[2] &amp;&amp; cardsSymbols[2] == cardsSymbols[3] &amp;&amp; cardsSymbols[3] == cardsSymbols[4]) {
          flush = true;
      }
      return flush;
  } // checks for a flush
  
  public static boolean checkStraight(String[] cardsvalues) {
      boolean straight = false;
      int numOfValues;
      int[] straightTab = new int[5];
      for (int i = 0; i &lt; hand.length; i++) {
          numOfValues = hand[i] % 13;
          straightTab[i] = numOfValues;
      }
      Arrays.sort(straightTab);
  
      if (straightTab[0] + 1 == straightTab[1] &amp;&amp; straightTab[1] + 1 == straightTab[2] &amp;&amp; straightTab[2] + 1 == straightTab[3] &amp;&amp; straightTab[3] + 1 == straightTab[4]) {
          straight = true;
      }
      return straight;
  } // checks for a straight
  
  public static int combinaisons(int paires, boolean straight, boolean flush) {
      int gains;
      if (straight &amp;&amp; flush) {
          System.out.println("Vous avez une Quinte !");
          gains = 500;
      } else if (flush) {
          System.out.println("Vous avez une Couleur !");
          gains = 100;
      } else if (straight) {
          System.out.println("Vous avez une Suite !");
          gains = 50;
      } else if (paires == 6) {
          System.out.println("Vous avez un Carré !");
          gains = 150;
      } else if (paires == 4) {
          System.out.println("Vous avez un Full !");
          gains = 75;
      } else if (paires == 3) {
          System.out.println("Vous avez un Brelan !");
          gains = 35;
      } else if (paires == 2) {
          System.out.println("Vous avez Deux Paires !");
          gains = 20;
      } else if (paires == 1) {
          System.out.println("Vous avez une Paire !");
          gains = 0;
      } else {
          System.out.println("Vous n'avez Aucune Combinaison !");
          gains = -10;
      }
      return gains;
  } // gives the user money based on his hand strength
  
  public static int profit(int gains) {
      balance = balance + gains;
      System.out.println("Vos gains sont  de " + gains + " $");
      System.out.println("Vous avez donc " + balance + " $");
      return gains;
  } // Gives the user his profit and his new balance
  
  public static void main(String[] args) { 
      do {
          menu(gains);
          drawCards(hand, pack);
          cardSymbol(hand, cardsSymbols);
          cardValue(hand, cardsValues);
          printCards(cardsSymbols, cardsValues);
          changeCards(hand, pack);
          paires = checkPairs(cardsSymbols, cardsValues);
          flush = checkFlush(cardsSymbols);
          straight = checkStraight(cardsValues);
          gains = combinaisons(paires, straight, flush);
          profit(gains);
      }while (balance &gt; 0);
      }// Here is my problem, the program just stops for a reason ...
  
  }
  </code></pre>