我的程序中有两个具有相同长度的数组,分别是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的初学者。
答案 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();
}
如果您希望子数组中的项分别为String
和Integer
,则需要强制转换它们,这是类型不安全的。
或者,如果可以将其中一对用作“键”,而另一个用作“值”,则可以将这些对存储在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)
结果是您可以分配引用,但前提是该数组不是原语数组,例如int
或double
String[] letterGrades = { "A", "B", "C" };
int[] numberGrades = { 1, 2, 3 };
Object[][] combined = new Object[2][];
combined[0] = letterGrades;
combined[1] = numberGrades; // error here
因此,在这种情况下,您不必使用int[]
或将元素复制到新数组中。