Write this in Java Please.
Include library   import java.util.Random ;   import java.util.Scanner;   import java.util.InputMismatchException;   //Define class cards   class Cards   {        //Declare variables        private Suits cardSuit;        private int cardNum;   private String[] numString = {"Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"};        //Define constructor        public Cards(Suits stype, int snum)        {             //Set card suit             this.cardSuit = stype;             if(snum >=1 && snum <= 13)             this.cardNum = snum;             else             {   System.err.println(snum+" is not a valid card numbern");                 System.exit(1);             }        }        public int lgetCardNumber()        {             return this.cardNum;        }        public String toString()        {   return this.numString[this.cardNum - 1]+" of "+this.cardSuit.toString();        }   }   class Deck   {   // cards in the deck --- arraylist or linkedlist could also be used        private Cards[] cardsInDeck;        private int numOfCardsInDeck;        private int onePack = 52;        public Deck()        {             this(1, true);        }        public Deck(int numPacks, boolean shuffle)        {             this.numOfCardsInDeck = numPacks*this.onePack;             this.cardsInDeck = new Cards[this.numOfCardsInDeck];             int c = 0;             // for each deck             for(int d=0;d<numPacks;d++)             {                 // for each suit                 for(int s=0; s<4;s++)                 {                      // for each number                      for(int n=1;n<=13;n++)                      {   this.cardsInDeck[c] = new Cards(Suits.values()[s], n);                           c++;                      }                 }             }             //shuffle             if(shuffle)             {                 this.lshuffleDeck();             }        }   // custom shuffle function--if <list> was used, it has a shuffle method build in        public void lshuffleDeck()        {             Random rng = new Random();             Cards temp;             // swapping             int j;             for(int li=0; li<this.numOfCardsInDeck;li++)             {                 j = rng.nextInt(this.numOfCardsInDeck);                 temp = this.cardsInDeck[li];                 this.cardsInDeck[li] = this.cardsInDeck[j];                 this.cardsInDeck[j] = temp;             }        }        // Deal card        public Cards dealingNextCard()        {             Cards topCard = this.cardsInDeck[0];             //Remove card                  for(int c =1; c<this.numOfCardsInDeck;c++)             {                 this.cardsInDeck[c-1] = this.cardsInDeck[c];             }             this.cardsInDeck[this.numOfCardsInDeck - 1] = null;             this.numOfCardsInDeck--;             return topCard;        }        public void printDeckCards(int num)        {             for(int c=0; c<num; c++)             {   System.out.printf("% 3d/%d %sn", c+1, this.numOfCardsInDeck, this.cardsInDeck[c].toString());             }   System.out.printf("tt[%d other]n", this.numOfCardsInDeck - num);        }   }   public class TestBlackJack   {        private Deck lnewDeck;        private String lplayerName;        private float lbalance;        private float lbet;        private boolean lyouDone;        private boolean ldealerDone;        private Players ldealer;        private Players lyou;        private Scanner lsc = new Scanner(System.in);        private boolean ldoubleDownAllowed;        TestBlackJack(String lpName)        {             this.lbalance = 100;             this.lnewDeck = new Deck(4, true);             boolean lgameOver = false;             this.lplayerName = lpName;   System.out.println("######################################################################################");   System.out.println("# Congratulations!! "+this.lplayerName+", you have got 100 points!!!!!!!!!!!!!!!!!!! #");   System.out.println("######################################################################################");             // Players init             lyou = new Players(this.lplayerName);             ldealer = new Players("Dealer");             // Start game             while(this.lbalance > 0 && !lgameOver)             {   System.out.println("n"+this.lplayerName+", DEAL or END the game [D or E]??");                 String gameInit = lsc.next();                 if(gameInit.compareToIgnoreCase("D") == 0)                 {                      this.ldealTheGame();                              }                 else                 {                      lgameOver = true;                 }                }   System.out.println("n"+this.lplayerName+", !!!! Game Ended !!!");             // Play again   System.out.println("n"+this.lplayerName+", Play again ??[Y or N]");             String Y = lsc.next();             if(Y.compareToIgnoreCase("Y") == 0)             {                 new TestBlackJack(this.lplayerName);             }             //closing lscan             lsc.close();        }        // Define ldealTheGame()        private void ldealTheGame()        {             boolean lblackjack = false;             this.lbet = 0 ;             this.ldoubleDownAllowed = true;             System.out.printf("nBalance:$%.1fn", this.lbalance);             String msg = "Enter bet for game :";             while(this.lbet<=0)             {                 try                 {                      System.out.println("n"+msg);                      this.lbet = lsc.nextFloat();                 }                 catch(InputMismatchException e)                 {                      lsc.nextLine();                 }                 finally                 {                      msg = "Enter bet in integers:";                 }                }   if((this.lbet >= 1) && (this.lbet%1 == 0) && (this.lbalance-this.lbet>=0))        {             this.lbalance = this.lbalance - this.lbet;             // Call emptyHand()             lyou.emptyHand();             ldealer.emptyHand();             this.lyouDone = false;             this.ldealerDone = false;             // Distribute cards             lyou.addCardToPlayersHand(lnewDeck.dealingNextCard());                                               ldealer.addCardToPlayersHand(lnewDeck.dealingNextCard());             lyou.addCardToPlayersHand(lnewDeck.dealingNextCard());                            ldealer.addCardToPlayersHand(lnewDeck.dealingNextCard());             // Dealt cards   System.out.println("n########## CARDS DEALT ##########n");             ldealer.printCardsInHand(false);             lyou.printCardsInHand(true);   System.out.printf("Your Score:%dt", lyou.lgetPlayersHandTotal());             System.out.printf("Bet:$%.0ft", this.lbet);             System.out.printf("Balance:$%.1fnn", this.lbalance);             // check initial card state             lblackjack = this.lcheckIfBlackJack();             while(!this.lyouDone || !this.ldealerDone)             {                 if(!this.lyouDone)                 {                      this.lyourPlay();                 }                 else if(!this.ldealerDone)                 {                      this.ldealersPlay();                 }                 System.out.println();             }             if(!lblackjack)             {                 this.ldecideWinner();                    }           }        else        {   System.out.println("n Wrong bet amount, should not be more than balance");   System.out.printf("Your Balance:$%.1fnn", this.lbalance);        }   }   // Define lcheckIfBlackJack()   private boolean lcheckIfBlackJack()   {        boolean lblackJack = false;        if(lyou.lgetPlayersHandTotal() == 21)        {             this.lyouDone = true;             this.ldealerDone = true;   if(lyou.lgetPlayersHandTotal() > ldealer.lgetPlayersHandTotal() || ldealer.lgetPlayersHandTotal() > 21)             {                  System.out.println("tttt#################################");   System.out.println("tttt# #");   System.out.println("tttt# HURRAY!!...BLACKJACK, YOU WON #");   System.out.println("tttt# #");   System.out.println("tttt#################################n");                 ldealer.printCardsInHand(true);   System.out.printf("Dealer's Score:%dnn", ldealer.lgetPlayersHandTotal());   System.out.printf("Your Bet was :$%.0ft", this.lbet);   System.out.printf("Your Balance was:$%.1fn", this.lbalance);   System.out.printf("You win[3:2]:$%.1ft", (3*this.lbet)/2);   this.lbalance = this.lbalance + (3*this.lbet)/2 + this.lbet;   System.out.printf("Your Current Bal ... See the full answer