Moving the contents at the start of an array to the end

Heya people,
Could kind of do with some help :P ...  I'm trying to write a card game in Java at the minute, and I've been trying to work out how to 'split' the deck as such for the last 3 hours, and everything I've tried just doesn't seem to be working, I dont think its anything difficult to do as such, but I just dont know how to do it, lol.

I have an array of 52 elements, 0-51, representing all of the cards in a full deck...  What I need to do, is find a way to split the deck, at a random point, and then move the contents from the end of the array to the beginning...

I've tried to copy the contents across to a temporary array and stuff, but it didn't seem to work, and I'm not to sure if I was even doing it the right way..

All I've got so far really as far as the 'split' function goes is:

      public void cut()
      {
            int rand = (int)(Math.random()*(52));      //      0 * 52 = 0;      1 * 52 = 52; generates a number between these two.
      }

Lol, not a fat lot I know, but I've been trying for the last 2 hours, and I've not really gotten anywhere...  I think I've managed to work out how to do the shuffle function thought :-) even though i expected it to be harder to do than the cut( )

- >

    public void shuffle()
    {
        for ( int i = 51; i > 0; i-- )
        {
            int rand = (int)(Math.random()*(i+1));
            Card temp = deck[i];
            deck[i] = deck[rand];
            deck[rand] = temp;
        }
        cardsDealt = 0;
    }

and it seems to work, but as far as the other function goes, although I get the feeling its something pretty simple, its making me want to throw my laptop across the room now...  please help, I'm a student, and I really cant afford a new one, he he...  any pointers in the right direction even would be much appreciated...

Thanks in advance.
ecksplosiveAsked:
Who is Participating?
 
zzynxConnect With a Mentor Software engineerCommented:
Maybe you better use a List instead of an array.
1) you get the shuffle for free:  java.util.Collections.shuffle(yourList);
2) doing what you asked for is rather easy

Remark:  java.util.Random r = new java.util.Random();
               int random = r.nextInt(52);  // Generates you a number between 0 and 51

So,

if your deck is  

    List deck = new ArrayList();
    deck.add(...); // add your cards this way

you can shuffle it by calling

    java.util.Collections.shuffle(deck);

and cut could look like

     public void cut() {
          int cutPosition = r.nextInt(52);   // with r defined as new Random() in the class's constructor
          for (int i=1; i<=52-cutPosition; i++)
            deck.add(0, deck.remove(deck.size()-1));  // take the last card and place it at the beginning (and do this cutPosition times)
     }

Yeah, that's really all there is.
And improvement to keep the number of moves as small as possible would be:

     public void cut() {
          int cutPosition = r.nextInt(52);   // with r defined as new Random() in the class's constructor
          if (cutPosition>=26) {
             for (int i=1; i<=52-cutPosition; i++)
               deck.add(0, deck.remove(deck.size()-1));  // take the last card and place it at the beginning (and do this cutPosition times)
          } else {
             for (int i=1; i<=cutPosition; i++)
               deck.add(deck.remove(0)); // Take the first card and move it to the back
          }
     }
0
 
WebstormConnect With a Mentor Commented:
Hi ecksplosive,

Use System.arraycopy :

     public void cut()
     {
          int rand = (int)(Math.random()*(52));     //     0 * 52 = 0;     1 * 52 = 52; generates a number between these two.
          Card[] tmp=new Card[rand];

          System.arraycopy(deck,0,tmp,0,rand);
          System.arraycopy(deck,rand,deck,0,52-rand);
          System.arraycopy(tmp,0,deck,52-rand,rand);
     }
0
 
ecksplosiveAuthor Commented:
Thanks dude, will give it a try!
0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

 
ecksplosiveAuthor Commented:
Thanks people, really helped me out of a lot; your help is much appreciated.
The way I decided to do it in the end, was by using a sort of combination of the two...

      public void cut()
      {
            Random randVar = new Random();
            int rand = randVar.nextInt(52);
            Card[] tmp = new Card[rand];

            System.arraycopy(deck,0,tmp,0,rand);
            System.arraycopy(deck,rand,deck,0,52-rand);
            System.arraycopy(tmp,0,deck,52-rand,rand);
      }

:-)
0
 
WebstormCommented:
:-)
0
 
zzynxSoftware engineerCommented:
Thanks
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.