Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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 仅使用for循环组合两个不重复的int数组_Java_Arrays - Fatal编程技术网

Java 仅使用for循环组合两个不重复的int数组

Java 仅使用for循环组合两个不重复的int数组,java,arrays,Java,Arrays,这是一个相当初级的作业,我很想得到一些代码方面的帮助 我需要使用for循环将两个整数数组合并为一个,并确保没有重复的数组。我在谷歌上搜索的任何东西都过于复杂,并且使用各种内置方法 这是我的密码: static void SumArray(){ int[] array1 = { 1, 2, 3 }; int[] array2 = { 3, 4, 5 }; int[] merged = new int[array1.length + array2.le

这是一个相当初级的作业,我很想得到一些代码方面的帮助

我需要使用for循环将两个整数数组合并为一个,并确保没有重复的数组。我在谷歌上搜索的任何东西都过于复杂,并且使用各种内置方法

这是我的密码:

static void SumArray(){
        int[] array1 = { 1, 2, 3 };
        int[] array2 = { 3, 4, 5 };
        int[] merged = new int[array1.length + array2.length];
        int pos = 0;

        for (int i = 0; i < array1.length; i++) {
            merged[pos] = array1[i];
            pos++;
        }
        for (int j = merged[pos]; j < array2.length; j++) {
            if (merged[pos] != array2[j]) {
                merged[pos] = array2[j];
                pos++;
            }
        }
        System.out.println(Arrays.toString(merged));
我相信我会找到办法的

我想知道如果我的
不起作用,为什么我的

因为
merged[pos]
始终为0,因为您从未在代码中为其分配过任何其他值。创建数组时,数组项初始化为零

您不能只检查一个条目就知道是否要从
array2
添加值。您必须检查您编写的所有条目,在第二个
for
循环中使用嵌套循环。仅在尚未添加新条目时添加新条目


请注意,您还需要提前检查有多少重复项,以便知道
merged
应该只有5个条目长,或者您需要在知道应该有多长时重新创建
merged
。否则,您的最终结果将是
{1,2,3,4,5,0}
,而不是
{1,2,3,4,5}

以下是Java 8及更高版本的解决方案:

int[] first = { 1, 2, 3 };
int[] second = { 3, 4, 5 };
int[] merged = Stream.of(first, second)
            .flatMapToInt(Arrays::stream)
            .distinct()
            .toArray();
因为第一个for循环中的“pos++”在第二个循环中用作j的开始索引。 你的3在索引2中,你将它与索引3进行比较,索引3永远不会相等

以下是你的答案:

int[] array1 = { 1, 2, 3 };
int[] array2 = { 3, 4, 5 };
int[] merged = new int[array1.length + array2.length];
    int pos = 0,i=0, j;

    Set<Integer> intSet = new HashSet();

    for (i = 0; i < array1.length; i++) {
        if(!intSet.contains(array1[i])) {
        merged[pos] = array1[i];
        intSet.add(Integer.valueOf(i));
        pos++;

        }
    }

    for (j= 0, pos = pos-1; j < array2.length; ) {
        if(!intSet.contains(Integer.valueOf(array2[j]))) {
            merged[pos] = array2[j];
            intSet.add(Integer.valueOf(i));
            pos++;
            j++;
        }
    }
    System.out.println(Arrays.toString(merged));
int[]array1={1,2,3};
int[]array2={3,4,5};
int[]合并=新int[array1.length+array2.length];
int pos=0,i=0,j;
Set intSet=new HashSet();
对于(i=0;i
您检查了错误的索引:
if(merged[pos]!=array2[j]){
应该是
if(merged[pos-1]!=array2[j]){
。请注意,只有在订购了互写的
array1
array2
时,代码才有效。请阅读: