【问题标题】:Make a new array with common elements in two arrays用两个数组中的公共元素创建一个新数组
【发布时间】:2019-06-05 02:05:47
【问题描述】:

我必须创建一个方法,该方法返回一个包含来自两个不同数组的公共元素的数组。我知道对此有很多问题,但我的问题与我必须创建一个新数组的问题有点不同。

我尝试先计算两个数组中有多少共同元素,然后创建一个大小与该数组相同的数组。

之后,我尝试使用 for 循环将新数组设置为公共元素。

public static int [] commonElements(int []a, int [] b){
      int count=0;
      for(int i=0;i<a.length;i++) {
         for(int j=0;j<b.length;j++) {
           if(a[i] == b[j]) {
             count++;
           }
        }
     }
     int []array= new int[count];

     for(int i=0;i<a.length;i++) {
        for(int j=0;j<b.length;j++) {
           if(a[i] == b[j]) {
              for (int k=0; k<count; k++){

                 array[k]=a[i];
             }
          }
       }
    }
    return array;
 }

这会返回四个 -1,所以它不起作用。 我也被要求不要使用arraylist,所以我不知道如何使这段代码完整。

的期望值
  // checking common elements
  System.out.println ("\nLooking for common elements in the arrays "); 
  int [] arr3= {56, -21, -5, 7, 10,  21, 2, -1};
  int [] arr4= {-1, -56, 5, 21, 3 , 7, 4, -6, 2, 90};
  int [] result4 = commonElements(arr3, arr4);
  System.out.println (Arrays.toString(arr3));
  System.out.println (Arrays.toString(arr4));  
  System.out.print ("\nCommon elements array:  ");
  System.out.println (Arrays.toString(result4));

主要是

     Looking for common elements in the arrays 
      [56, -21, -5, 7, 10, 21, 2, -1]
      [-1, -56, 5, 21, 3, 7, 4, -6, 2, 90]

      Common elements array:  [7, 21, 2, -1]

任何帮助将不胜感激!

【问题讨论】:

  • 在 for 循环外声明 k=0 并在循环内递增 array[k++]=a[i];

标签: java


【解决方案1】:

您可能希望使用列表来存储中间相交值,然后在方法末尾转换为数组:

public static int[] commonElements(int[] a, int[] b) {
    List<Integer> common = new ArrayList<>();

    for (int i=0; i < a.length; i++) {
        for(int j=0; j < b.length; j++) {
            if (a[i] == b[j]) {
                common.add(a[i]);
            }
        }
    }

    int[] array = common.stream().mapToInt(Integer::intValue).toArray();
    return array;
}

如果您不想记录重复,请将common 替换为Set&lt;Integer&gt;

【讨论】:

    【解决方案2】:

    首先,您需要new int[count]; 而不是new int[count]; - 其次,在填充输出时保留位置索引而不是第三个内部循环,并在遇到重复时增加它。喜欢,

    public static int[] commonElements(int[] a, int[] b) {
        int count = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < b.length; j++) {
                if (a[i] == b[j]) {
                    count++;
                }
            }
        }
        int[] array = new int[count];
        int p = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < b.length; j++) {
                if (a[i] == b[j]) {
                    array[p] = a[i];
                    p++;
                }
            }
        }
        return array;
    }
    

    或者,如果使用 Java 8+,可以通过过滤两个数组的 IntStream 来简化上述操作。喜欢,

    return Arrays.stream(a).filter(i -> Arrays.stream(b).anyMatch(x -> x == i))
            .toArray();
    

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 2015-07-20
      相关资源
      最近更新 更多