Results 1 to 6 of 6
Thread: ArrayIndexOutOfBoundsException
 02012010, 04:10 AM #1Member
 Join Date
 Feb 2010
 Posts
 4
 Rep Power
 0
ArrayIndexOutOfBoundsException
Hey, I'm new to java and I'm working on a simple program to try and run a simulated card game. I'm trying to construct a deck of 52 cards that will be in random order. Cards have been defined and list is an array of 52 cards, in order. For some reason I am getting an error on my randomizer method, even though I've double checked to ensure the indices are valid yet i'm still getting the ArrayIndexOutOfBoundsException thrown at me. Perhaps i've over looked something, here is the code that contains the error.
private Card[] randomizer()
{
int count = 1;
int num;
int index = 1;
boolean located;
Card[] randomDeck = new Card[52];
int nums[] = new int[52];
for (int x = 1; x <= 52; x++)
nums[x  1] = x;
while (count <= 52)
{
index = 1;
located = false;
num = (int)(Math.random()*52+1);
while (index < 52  located == false)
{
if (nums[index  1] == num) //Error: ArrayIndexOutOfBoundsException
{
randomDeck[count  1] = list[num 1];
nums[index  1] = 0;
located = true;
count++;
}
else
index++;
}
}
return randomDeck;
}
Thank you for any help
 02012010, 04:40 AM #2Senior Member
 Join Date
 Nov 2009
 Posts
 235
 Rep Power
 7
Here is an easy shuffle algorithm from Wikipedia called the FisherYates shuffle.
Java Code:public static void shuffle(int[] array) { Random rng = new Random(); // java.util.Random. // n is the number of items left to shuffle for (int n = array.length; n > 1; n) { // Pick a random element to move to the end int k = rng.nextInt(n); // 0 <= k <= n  1. // Simple swap of variables int tmp = array[k]; array[k] = array[n  1]; array[n  1] = tmp; } }
 02012010, 05:26 AM #3Member
 Join Date
 Feb 2010
 Posts
 4
 Rep Power
 0
interesting, i'll try that instead, seems like a lot less headache
 02012010, 05:45 AM #4Member
 Join Date
 Feb 2010
 Posts
 4
 Rep Power
 0
Hmm, that seems to have fixed the IndexOutOfBounds exception, but now I get the NullPointerException when I try to use that method in one of my constructors. Im pasting below: the constructor, the revised randomizer method and, the static list array, in case that helps.
public Deck()
{
Card[] random = randomizer();
for (int i = 1; i <= 26; i++)
deck.add(random[i1]); //ERROR HERE
}
private Card[] randomizer()
{
Random rng = new Random(); // java.util.Random.
// n is the number of items left to shuffle
Card[] randomDeck = list;
for (int i = 1; i <= 52; i++)
randomDeck[i  1] = list[i  1];
for (int n = randomDeck.length; n > 1; n)
{
// Pick a random element to move to the end
int k = rng.nextInt(n); // 0 <= k <= n  1.
// Simple swap of variables
Card tmp = randomDeck[k];
randomDeck[k] = randomDeck[n  1];
randomDeck[n  1] = tmp;
}
return randomDeck;
}
private static Card[] list; // list is a static array, so im not sure if that is affecting the constructor through the randomizer method. If so, i need the data in list, so should I simply copy the data manually, and am i creating an alias and really shuffling list (which i would like to remain in order)?
 02012010, 06:49 AM #5Senior Member
 Join Date
 Nov 2009
 Posts
 235
 Rep Power
 7
First of all, in your loop:
Java Code:for (int i = 1; i <= 52; i++) randomDeck[i  1] = list[i  1];
Java Code:for (int i = 0; i < 52; i++) randomDeck[i] = list[i];
Second, why dont you just add cards 051 to the deck, and then use Collections.Shuffle(); It works a lot better.
 02022010, 02:25 AM #6Member
 Join Date
 Feb 2010
 Posts
 4
 Rep Power
 0
Similar Threads

Suprising ArrayIndexOutOfBoundsException!!!!!!
By nmvictor in forum New To JavaReplies: 5Last Post: 11182009, 11:21 PM 
ArrayIndexOutOfBoundsException
By flaskvacuum in forum New To JavaReplies: 6Last Post: 07142009, 05:36 PM 
[SOLVED] ArrayIndexOutOfBoundsException
By thelinuxguy in forum Advanced JavaReplies: 1Last Post: 05072009, 10:34 PM 
ArrayIndexOutofBoundsException help
By filly444 in forum New To JavaReplies: 9Last Post: 09032008, 05:16 PM 
ArrayIndexOutOfBoundsException
By daredavil82 in forum New To JavaReplies: 2Last Post: 12142007, 10:29 PM
Bookmarks