【问题标题】:Java turning two arrays into one two-dimensional arrayJava将两个数组变成一个二维数组
【发布时间】:2018-12-16 10:39:43
【问题描述】:

我的程序中有两个长度相同的数组 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的初学者。

【问题讨论】:

  • 我认为你必须复制数组元素。可能只分配引用,但我必须测试它(你也可以)。
  • 如果您将courseGradescourseCredits 转换为Object[],那么您可以得到您的预期结果为Object[][] results = new Object[][2](); result[0] = courseGrades; result[1] = courseCredits;,并且不会发生内存复制。不过,如果您想记住一个数组包含 ints 和另一个 - Strings,那么您就不走运了。您实际需要做的是创建 Course 类,该类将保留 gradecredit - 然后您创建一个 Courses 数组,而不是两个数组。
  • 附言。代码 sn-p 未检查 - 语法可能是错误的,因为我通常不使用数组,更经常使用列表和其他集合。

标签: java arrays loops multidimensional-array


【解决方案1】:

您可以创建一个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]);
}

【讨论】:

    【解决方案2】:

    您似乎想将字符串数组与ints 数组组合成一个二维数组。

    在 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();
    }
    

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

    或者,您可以将这些对存储在 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]);
    }
    

    【讨论】:

      【解决方案3】:

      事实证明,您可以分配引用,但前提是数组不是基元数组,例如 intdouble

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

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

      【讨论】:

        猜你喜欢
        • 2021-10-29
        • 2012-11-13
        • 1970-01-01
        • 2011-04-10
        • 2017-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-16
        相关资源
        最近更新 更多