Java:使用第一个数组的前 3 个整数,然后使用第二个数组的 3 个整数,将 2 个数组组合成第三个数组

标签 java arrays netbeans

我有 3 个数组 A、B 和 C。A 和 B 的大小为 6,C 的大小为 12。我必须将 A 和 B 组合成 C,但使用 A 的前 3 个整数,然后使用第一个B 的 3 个整数,然后是 A 的接下来 3 个整数,最后是 B 的最后 3 个整数。例如:int A[]={1,2,3,7,8,9}, B[]={4, 5,6,10,11,12} 并用 C[]={1,2,3,4,5,6,7,8,9,10,11,12}

填充 C

这是我到目前为止的代码:

   public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int[] A = new int[6];
    int[] B = new int[6];
    int[] C = new int[12];

    int count = 0;

    for (int i = 0; i < 6; i++) {
        System.out.println("Array A: ");
        A[i]=sc.nextInt();
        System.out.println("Array B: ");
        B[i]=sc.nextInt();
    }

    System.out.println("");
    System.out.print("|");
    for (int i = 0; i < 6; i++) {
        System.out.print(A[i]+"|");
    }
    System.out.println("");
    System.out.print("|");
    for (int i = 0; i < 6; i++) {
        System.out.print(B[i]+"|");
    }

    while(count < 3){
    count++;
    {

我真的迷失了这个

最佳答案

这是一个相对简单的问题,可以通过多种方式解决。最简单的是,因为这是您给出的静态示例,执行类似的操作

    c[0] = a[0];
    c[1] = a[1];
    c[2] = a[2];
    c[3] = b[0];
         .
         .
         .
    c[11] = b[5]

这不能很好地扩展,并且难以维护,但从技术上讲可以满足您的要求。

接下来,我将简单地看一下 for 循环。在这篇文章的前一个版本中,我没有包含它们,因为我看到了其他回复,但后来添加了它们,因为我认为它们可以改进:

    //  Using loops     
    final int[] c = new int[12];
    for (int i = 0; i < 3; ++i) {
        c[i] = a[i];
        c[i + 3] = b[i];
        c[i + 6] = a[i + 3];
        c[i + 9] = b[i + 3];
    }

这也非常简单高效。我们只需要 3 次循环迭代即可覆盖数组的两半,使用偏移量来避免为每个部分创建多个 for 循环。这种简单的知识来自于经验,因此我建议通过更多示例来了解。

接下来,我们将看看一些更有趣的选项。如果您不熟悉 Java API,我建议您首先在谷歌上搜索各种内容,例如“java 复制数组的一部分”或“java 将数组插入另一个数组”。

此类搜索会导致类似以下的帖子:

Java copy section of array

Insert array into another array

How to use subList()

从那里,您可以构造一个相当明确的答案,例如:

    //  Using System::arraycopy<T>(T[], int, T[], int, int), where T is the array-type.
    final int[] c = new int[12];
    System.arraycopy(a, 0, c, 0, 3);
    System.arraycopy(b, 0, c, 3, 3);
    System.arraycopy(a, 3, c, 6, 3);
    System.arraycopy(b, 3, c, 9, 3);

这可能足以满足您的大多数需求。

但是,通过这个过程,我学会了另一种使用流来实现这一点的方法!

    // Using java.util.stream
    final List<Integer> l_a = Arrays.stream(a).boxed().collect(Collectors.toList());
    final List<Integer> l_b = Arrays.stream(b).boxed().collect(Collectors.toList());

    final List<Integer> l_c = new ArrayList<Integer>() {{
        addAll(l_a.subList(0, 3));
        addAll(l_b.subList(0, 3));
        addAll(l_a.subList(3, 6));
        addAll(l_b.subList(3, 6));
    }};

    final int[] c = l_c.stream().mapToInt(i -> i).toArray();

虽然最后一个例子可能不如第二个例子优雅,但通过研究问题和潜在解决方案的过程教会了我一些东西,我现在可以随身携带。

希望这有帮助!

关于Java:使用第一个数组的前 3 个整数,然后使用第二个数组的 3 个整数,将 2 个数组组合成第三个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52599129/

相关文章:

python - python 检查一个数组是否是另一个数组的元素

java - 如何使用 Java Netbeans 读取项目文件夹之外的 txt 文件

java - 在 glassfish/soap java webservices 中禁用传输编码分块

java - 在swing中上传Excel文件

java - Jsf表单打印预览

java - 来自一个 InputStream 的 2 个 BufferedReader

java - Wildfly 9.0.0 和 Netbeans 8.0.2

java - 过滤两次 Lambda Java

c - 有没有办法创建一个空的 C 数组,并在更新它时跟踪它的空性?

c - 数组是变量还是常量?