创建一个随机化java中对象的二维数组

时间:2014-02-07 10:07:00

标签: java arrays

所以我试图创建一个4x4的2-D数组,我有8个不同的类,我想随机化它们在程序运行时输入到2-D数组的位置。我理解随机化或改组数字的概念,但是当谈到课程我不知道。我打算手动初始化它,但是想知道是否有人知道如何将这些位置随机化。

编辑: 我应该澄清,我想严格使用数组但也许我只是困惑。 例如,如果我手动完成,我有:

    board = new CardGame[4][4];

    board[0][0] = new Card1();
    board[0][1] = new Card1();
    board[0][2] = new Card2();
    board[0][3] = new Card2();  
    board[1][0] = new Card3();
    board[1][1] = new Card3();
    board[1][2] = new Card4();
    board[1][3] = new Card4();
    board[2][0] = new Card5();
    board[2][1] = new Card5();
    board[2][2] = new Card6();
    board[2][3] = new Card6();  
    board[3][0] = new Card7();
    board[3][1] = new Card7();
    board[3][2] = new Card8();
    board[3][3] = new Card8();

我很困惑如何将其实现为随机。

4 个答案:

答案 0 :(得分:0)

将8个对象放入List中,选择一个随机数0< = x< 8并在列表中选择该类。选择一个随机对象并将其放入二维数组中,直到完成为止。

答案 1 :(得分:0)

为了回应更新的问题,您可以将此方法用于您的代码。

// Implementing Fisher–Yates shuffle
static void shuffleArray(CardGame[] ar)
{
  Random rnd = new Random();
  for (int i = ar.length - 1; i > 0; i--)
  {
    int index = rnd.nextInt(i + 1);
    // Simple swap
    CardGame a = ar[index];
    ar[index] = ar[i];
    ar[i] = a;
  }
}

通过:

调用
shuffleArray(board[0]);
shuffleArray(board[1]);
shuffleArray(board[2]);
shuffleArray(board[3]);

答案 2 :(得分:0)

如果它是一个4x4阵列,你知道它的位置在[0][0][3][3]之间。

对于每个对象,您可以在0到3之间获得2个随机数,例如xy。之后,检查阵列中的位置[x][y]是否已有对象,如果没有,请将其放在那里。如果已经存在Object,则可以重新生成一个新的随机数对并检查该对。

答案 3 :(得分:0)

创建随机(x,y)-Positions并将对象放入相应的数组单元格可能会导致碰撞 - 从理论的角度来看,当所选择的坐标已被占用时,重新生成新坐标并不是那么好因为它不一定会终止。如果数组大小很小,这可能不是问题,但我仍然宁愿使用其他策略

(编辑:根据更新的问题更改)

E.g。使用卡填充列表,然后Collections#shuffle此列表,并将其逐行放入数组中。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


class Card{}
class Card1 extends Card{}
class Card2 extends Card{}
class Card3 extends Card{}
class Card4 extends Card{}
class Card5 extends Card{}
class Card6 extends Card{}
class Card7 extends Card{}
class Card8 extends Card{}
public class CardShuffle
{
    public static void main(String[] args)
    {
        Card[][] board = new Card[4][4];

        List<Card> list = new ArrayList<Card>();
        list.add(new Card1());
        list.add(new Card1());
        list.add(new Card2());
        list.add(new Card2());
        list.add(new Card3());
        list.add(new Card3());
        list.add(new Card4());
        list.add(new Card4());
        list.add(new Card5());
        list.add(new Card5());
        list.add(new Card6());
        list.add(new Card6());
        list.add(new Card7());
        list.add(new Card7());
        list.add(new Card8());
        list.add(new Card8());
        Collections.shuffle(list);

        fill(board, list);
    }

    private static void fill(Card board[][], List<Card> list)
    {
        int index = 0;
        for (int i=0; i<board.length; i++)
        {
            for (int j=0; j<board[i].length; j++)
            {
                board[i][j] = list.get(index);
                index++;
                if (index >= list.size())
                {
                    return;
                }
            }
        }
    }

}