所以我试图创建一个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();
我很困惑如何将其实现为随机。
答案 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个随机数,例如x
和y
。之后,检查阵列中的位置[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;
}
}
}
}
}