Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将两个数组相乘,并将结果放入第三个数组中_Java_Arrays - Fatal编程技术网

Java 将两个数组相乘,并将结果放入第三个数组中

Java 将两个数组相乘,并将结果放入第三个数组中,java,arrays,Java,Arrays,假设我们有两个阵列: String[] arr1 = {"a", "b"}; String[] arr2 = {"1", "2", "3"}; 获取第三个字符串数组的更好方法是什么,该数组包含这两个字符串的相乘值。比如: String[] arr3 = {"a1", "a2", "a3", "b1", "b2", "b3"}; 我知道,我可以使用循环,将1中的每个元素与2中的每个元素连接起来,并将结果放入3中。但实际上,在arr1和arr2中有更多的元素。Java中是否有一种特殊的工具可以使

假设我们有两个阵列:

String[] arr1 = {"a", "b"};
String[] arr2 = {"1", "2", "3"};
获取第三个字符串数组的更好方法是什么,该数组包含这两个字符串的相乘值。比如:

String[] arr3 = {"a1", "a2", "a3", "b1", "b2", "b3"};

我知道,我可以使用循环,将1中的每个元素与2中的每个元素连接起来,并将结果放入3中。但实际上,在arr1和arr2中有更多的元素。Java中是否有一种特殊的工具可以使其更高效?

如果您可以使用Java 8,这是一个单行程序:

public static void main(String[] args) {
    String[] arr1 = {"a", "b"};
    String[] arr2 = {"1", "2", "3"};
    String[] result = Arrays.stream(arr1).flatMap(s1 -> Arrays.stream(arr2).map(s2 -> s1 + s2)).toArray(String[]::new);
    System.out.println(Arrays.toString(result));
}
逻辑是,第一个数组的每个元素都映射到第二个数组中由该元素前置的所有元素的流。然后将该流展平并收集到阵列中

否则,尽管您没有发布您当前拥有的代码,但这听起来是一种很好的方法,而且Java中没有神奇的方法可以让它更简单

    int z = 0;
    String[] suit_arr = {"C", "D", "H", "S"};
    String[] rank_arr = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
    String[] pack = new String[52];
    for (int i = 0; i < suit_arr.length; i++) {
        for (int j = 0; j < rank_arr.length; j++) {
            pack[z] = suit_arr[i] + rank_arr[j];
            z++;
        }

    }
    for (int y = 0; y < pack.length; y++) {
        System.out.println(pack[y]);
    }

}
这是卡片包装用的。 所以这不仅仅是串联,就像我必须在数组的每个元素之间得到所有可能的混合。
顺便问一下,为什么我的问题会被否定?这是一个愚蠢的问题还是什么?

如果从渐近复杂性的意义上说是有效的,那么没有比嵌套循环更有效的方法了。不管怎样,您都需要生成并记录对arr1.length*arr2.length字符串的引用,在最佳情况下,需要与元素数量成比例的工作;也就是说,它是oarr1.length*arr2.length。嵌套循环方法已经显示出最好的案例复杂性


但是,您也可以使用Java8流解决这个问题,它可以更紧凑、更清晰地表达。这也为并行化操作提供了一个入口,因此,尽管它不会降低渐进复杂性,并且可能具有更高的总体成本,但如果您的意思是在墙时间更少的意义上高效,那么流可能就是您所寻找的。另一个答案已经提供了详细信息。

发布您目前掌握的代码。您正在使用Java8吗?你可能会发现这很有用。但是,您需要将数组来回转换为流。就我所知,没有更好的办法了为什么投了反对票?我觉得这是一个很好的问题,尤其是对于一个新的user@dacrovinunghiOP不是要求连接列表,而是要求交叉连接列表。这是您当前拥有的代码吗?如果是这样的话,你应该把它贴在你的问题上。我现在有了,以前也没问过。例如,我就写了它。但是我想到了!发布代码,以便顾问能够更好地了解问题。我说得对吗?是的。它还表明您试图做一些事情,通过为回答者提供一个基本代码,使问题变得更好。如果我猜的话,这可能就是为什么你的问题因为没有显示现有代码而被否决的原因。明白了!谢谢你的例子很酷,但我必须阅读一些员工才能清楚地理解它。但是,毫无疑问,我投了赞成票。