对不起,我是Java的新手,也许我的问题有点愚蠢,但请帮助我。 所以,我这里有2个数组:
char[] alphabet = {'A','B','C','D','E','F','G','H','I','J'
,'K','L','M','N','O','P','Q','R','S','T'
,'U','V','W','X','Y','Z'};
char[] numberArray = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
然后我已经将两个数组合并到一个新数组中然后随机化它,例如输出就像:
4 Z B 8 R W P F T 1 D H S L Q 2 N J 5 6 V 3 A C 0 G K U E X 7 O Y M 9 I
我编写的用于合并两个数组的代码如下:
public static char[]merge(char[]alphabet, char[]numberArray){
char[] both = new char[alphabet.length+numberArray.length];
int i;
for(i=0; i<alphabet.length; i++)
both[i] = alphabet[i];
for(int j=0; j<numberArray.length; j++)
both[i++]=numberArray[j]; return both;
}
然后从这个输出我想把所有这些元素组成几个带有随机元素的2D数组。像这样
G 4
7 Y
或者
H T
U 8
等等.. 我该如何制作这样的输出?如何将其变成2x2阵列?
哦,为了说清楚,我想把它变成2个以上的2x2阵列,并自动生成它,也许我需要循环来生成它们。答案 0 :(得分:2)
阅读this answer以了解如何使用Java创建2D数组。
如果您了解如何创建它,您将了解如何填充它。然后,您可以随机选择Random
类的元素,例如:
// generates an integer between 0 (inclusive) and arrayLength (exclusive)
new Random().nextInt(arrayLength);
答案 1 :(得分:0)
您可以使用Fisher-Yates算法对数组进行随机播放,如here所述。
// Implementing Fisher–Yates shuffle
static void shuffleArray(char[] ar)
{
// If running on Java 6 or older, use `new Random()` on RHS here
Random rnd = ThreadLocalRandom.current();
for (int i = ar.length - 1; i > 0; i--)
{
int index = rnd.nextInt(i + 1);
// Simple swap
int a = ar[index];
ar[index] = ar[i];
ar[i] = a;
}
}
随机化合并后的数组后,这应该可以解决问题:
char[][][] your_array = new char[9][2][2]
for (int i = 0; i < 9; i++) {
your_array[i][0][0] = randomized_array[4*i]
your_array[i][0][1] = randomized_array[4*i + 1]
your_array[i][1][0] = randomized_array[4*i + 2]
your_array[i][1][1] = randomized_array[4*i + 3]
}
你可以像这样访问每个2x2数组:your_array[0]
返回第一个,your_array[0]
第二个,等等。
答案 2 :(得分:0)
另一个答案
首先,您可以使用集合,无需循环:
// just change char to Character
List<Character> alpha =Arrays.asList(alphabet);
List<Character> numb =Arrays.asList(numberArray);
List<Character> all=new ArrayList<Character>();
all.addAll(alpha);
all.addAll(numb);
Character [] both2=all.toArray(new Character[all.size()]);
然后对于4个值,在所有(一些循环)之间随机取4个索引:
// SELECTING
int how_many=10;
int total_size=all.size();
char[][][] ard2=new char[how_many][2][2];
for (int k=0;k<how_many;k++)
{
char[][] current_ard2=ard2[k];
// Take 4 chars differents, by taking 4 different indexes
int[] idx=new int[4];
for (int j=0;j<4;j++)
{
boolean not_done=true;
while (not_done)
{
boolean done=true; // by default
int candidate=(int) (Math.random()*total_size);
// check precedent values
for (int h=0;h<j;h++)
if (idx[h]==candidate)
{// lost !
done=false;
break;
}
if (!done) continue; // candidate already exists
// bingo
idx[j]=candidate;
not_done=false;
}
} // for (int j=0;j<4;j++)
current_ard2[0][0]=both2[idx[0]];
current_ard2[0][1]=both2[idx[1]];
current_ard2[1][0]=both2[idx[2]];
current_ard2[1][1]=both2[idx[3]];
System.out.println(current_ard2[0][0]+" "+current_ard2[0][1]+"\n"+current_ard2[1][0]+" "+current_ard2[1][1]+"\n");
} // for (int k=0;k<how_many;k++)
希望有所帮助