Java将两个数组变成一个二维数组

时间:2018-07-08 16:04:47

标签: java arrays loops multidimensional-array

我的程序中有两个具有相同长度的数组,分别是courseGrades和courseCredits,看起来像这样:

courseGrades[] = {A, A, B, A, C, A};
courseCredits[] = {1, 2, 1, 3, 2, 1};

我想将它们组合成一个二维数组,显示如下:

A    A    B    A    C    A
1    2    1    3    2    1

我将如何用Java做到这一点? 此外,您将如何引用此数组中的每个元素? 抱歉,这个非常简单的问题,我还是Java的初学者。

3 个答案:

答案 0 :(得分:2)

您可以创建一个Pair类,如下所示:

public class Pair<K, V> {
    public K key;
    public V value;

    public Pair() {}

    public Pair(K key, V value) {
        this.key = key;
        this.value = value;
    }
}

然后创建一个Pairs数组。我已经有一段时间没有使用Java了,所以我可能在这里犯过一些错字,但这就是这个想法:

Pair<char, int> result[] = new Pair<char, int>[keys.length];

for (int i = 0; i < keys.length; i++) {
    result[i] = new Pair<char, int>(keys[i], values[i]);
}

答案 1 :(得分:1)

您似乎想将字符串数组和int s数组组合成2D数组。

在Java中,二维数组只能存储一种东西,因此没有类型安全的方法可以做到这一点。一种不安全的方法是将它们存储在Object[][]中:

String[] grades = {"A", "B", "C"};
Integer[] credits = {1, 2, 3};
Object[][] gradesAndCredits = { grades, credits };
for (int i = 0; i < gradesAndCredits.length ; i++) {
    for (int j = 0 ; j < gradesAndCredits[i].length ; j++) {
        System.out.print(gradesAndCredits[i][j] + " ");
    }
    System.out.println();
}

如果您希望子数组中的项分别为StringInteger,则需要强制转换它们,这是类型不安全的。

或者,如果可以将其中一对用作“键”,而另一个用作“值”,则可以将这些对存储在HashMap中。

String[] grades = {"A", "B", "C"};
Integer[] credits = {1, 2, 3};
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0 ; i < grades.length ; i++) {
    map.put(grades[i], credits[i]);
}

答案 2 :(得分:0)

结果是您可以分配引用,但前提是该数组不是原语数组,例如intdouble

String[] letterGrades = { "A", "B", "C" };
int[] numberGrades = { 1, 2, 3 };
Object[][] combined = new Object[2][];
combined[0] = letterGrades;
combined[1] = numberGrades;  // error here

因此,在这种情况下,您不必使用int[]或将元素复制到新数组中。