有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java创建一个方法,该方法使用2个给定数组返回一个新数组,其中包含来自a和b的元素,且没有重复项:

大家好,我是一个初学者,我正在尝试解决这个问题,这里是我迄今为止尝试过的。。。但我真的很困惑:

编写一个名为int[]arrayUnion(int[]a,int[]b)的方法,给定两个int数组,该方法返回一个新数组,其中包含来自a和b的唯一元素。没有重复

示例输出: arrayUnion([1,2,3],-1,0,1])返回[1,2,3,-1,0]

arrayUnion([1,1,1],[1,1,1])返回[1]

   public static int[] arrayUnion(int[] a, int[] b){
        int[] result;

        for(int i =0; i< a.length; i++){
            for(int k =0; k<result.length; k++){
                if(a[i]!= result[k]){
                    result.add(a[i]);
                }
            }
        }


         for(int j =0; j< b.length; j++){
            for(int k =0; k<result.length; k++){
                if(b[j]!=result[k]){
                  result.add(b[j]);
                }
            }
        }
        return result;
    }

共 (3) 个答案

  1. # 1 楼答案

    首先,不能对数组使用add方法。因此,您的代码可以如下所示:

    public int[] arrayUnion(int[] a, int[] b) {
        List<Integer> result = new ArrayList<>();
    
        for (int value: a) {
            if (!result.contains(value)) {
                result.add(value);
            }
        }
    
        for (int value: b) {
            if (!result.contains(value)) {
                result.add(value);
            }
        }
    
        return result.stream().mapToInt(Integer::intValue).toArray();
    }
    

    第二,这是一个有点容易设置。因此,您可以轻松地添加所有值并返回数组:

    public int[] arrayUnion(int[] a, int[] b) {
        Set<Integer> result = new HashSet<>();
    
        for (int value: a) {
            result.add(value);
        }
    
        for (int value: b) {
            result.add(value);
        }
    
        return result.stream().mapToInt(Integer::intValue).toArray();
    }
    

    还有第三种选择。您可以将Java流API与flatMap一起使用:

    public int[] arrayUnion(int[] a, int[] b) {
        return Stream.of(a, b).flatMapToInt(IntStream::of).distinct().toArray();
    }
    
  2. # 2 楼答案

    您可以通过一个流来实现,合并两个数组,只保留单个数组中的不同值

    int[] a = { 1, 2, 3, 2, 7, 4, 5 };
    int[] b = { 2, 9, 4, 5, 5 };
    
    int[] union = arrayUnion(a,b);
    System.out.println(Arrays.toString(union));
     
    

    印刷品

    [1, 2, 3, 4, 5, 7, 9]   
    

    这是由

    • 将两个数组展平为Intstream
    • 消除重复
    • 并转换回int array
    static int[] arrayUnion(int[] a, int[] b) {
      return Stream.of(a,b).flatMapToInt(IntStream::of)
         .distinct()
         .toArray();
    }
    
  3. # 3 楼答案

    如果可以使用Java集合,则可以使用如下集合来获取唯一整数数组:

    public static int[] arrayUnion(int[] a, int[] b){
    
            HashSet<Integer> set=new HashSet();
    
            for(int i =0; i< a.length; i++){
                set.add(a[i]);  
            }
    
            for(int i =0; i< b.length; i++){
                set.add(b[i]);  
            }
    
            int n = s.size(); 
            int[] result; = new String[n]; 
      
            int j = 0;
            for(Integer i: set) {
                result[j++] = i;
            }
    
            return result;
    }