Results 1 to 6 of 6
  1. #1
    Corey is offline Member
    Join Date
    Feb 2010
    Posts
    4
    Rep Power
    0

    Default 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

  2. #2
    collin389 is offline Senior Member
    Join Date
    Nov 2009
    Posts
    235
    Rep Power
    6

    Default

    Here is an easy shuffle algorithm from Wikipedia called the Fisher-Yates 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;
        }
    }

  3. #3
    Corey is offline Member
    Join Date
    Feb 2010
    Posts
    4
    Rep Power
    0

    Default

    interesting, i'll try that instead, seems like a lot less headache

  4. #4
    Corey is offline Member
    Join Date
    Feb 2010
    Posts
    4
    Rep Power
    0

    Default

    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[i-1]); //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)?

  5. #5
    collin389 is offline Senior Member
    Join Date
    Nov 2009
    Posts
    235
    Rep Power
    6

    Default

    First of all, in your loop:
    Java Code:
    for (int i = 1; i <= 52; i++)
    randomDeck[i - 1] = list[i - 1];
    you can instead say:
    Java Code:
    for (int i = 0; i < 52; i++)
    randomDeck[i] = list[i];
    and it will do the same thing

    Second, why dont you just add cards 0-51 to the deck, and then use Collections.Shuffle(); It works a lot better.

  6. #6
    Corey is offline Member
    Join Date
    Feb 2010
    Posts
    4
    Rep Power
    0

Similar Threads

  1. Suprising ArrayIndexOutOfBoundsException!!!!!!
    By nmvictor in forum New To Java
    Replies: 5
    Last Post: 11-18-2009, 11:21 PM
  2. ArrayIndexOutOfBoundsException
    By flaskvacuum in forum New To Java
    Replies: 6
    Last Post: 07-14-2009, 06:36 PM
  3. [SOLVED] ArrayIndexOutOfBoundsException
    By thelinuxguy in forum Advanced Java
    Replies: 1
    Last Post: 05-07-2009, 11:34 PM
  4. ArrayIndexOutofBoundsException help
    By filly444 in forum New To Java
    Replies: 9
    Last Post: 09-03-2008, 06:16 PM
  5. ArrayIndexOutOfBoundsException
    By daredavil82 in forum New To Java
    Replies: 2
    Last Post: 12-14-2007, 10:29 PM

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •