如何将数组制作成2D数组?

时间:2015-12-21 15:27:59

标签: java arrays

对不起,我是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阵列,并自动生成它,也许我需要循环来生成它们。

3 个答案:

答案 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++)

希望有所帮助