有 Java 编程相关的问题?

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

java从另一个数组复制一个没有数字的数组

我想将一个数组(arr1)传输到另一个数组(arr3),但不传输另一个数组(arr2)中的整数,因此如果arr1中的一个数字不在arr2中,那么如果它是arr2的一部分,请将其放入arr3跳过它,不要将其添加到arr3中

这就是我得到的,但我认为它不起作用,因为for循环^{,但我找不到另一个有效的解决方案

int[] arr3 = new int[arr1.length - arr2.length];

for (int i = 0; i < arr1.length; i++) {

    for(int l=0; l<arr2.length; l++) {

        if (arr[i] != arr2[l]) {
            arr3[j] = arr[i];
        }
    }
}

共 (2) 个答案

  1. # 1 楼答案

    由于第二个FOR循环没有检查第二个数组中的所有项,因此它不会给出正确的结果

    创建一个helper函数,该函数将迭代整个数组,以检查数组中是否存在数字。像这样

    boolean containsTarget(int[] array, int target){
        for(int i = 0; i < array.length; i++){
            if(array[i] == target){
                return true;
            }
        }
        return false;
    }
    

    然后在第一个FOR循环中调用这个函数来执行检查

    List<Integer> arr3 = new ArrayList<Integer>(); //Using arraylist because i am not sure what will be the size of the final array.
    
    for (int i = 0; i < arr1.length; i++) {
    
        if(!containsTarget(arr2, arr1[i])){
            arr3.add(arr1[i]);
        }
    }
    

    我还没有测试过这段代码,但在更高的层次上,这种逻辑应该可以工作

  2. # 2 楼答案

    你认为循环条件有问题。 下面是代码。我测试

    public static void main(String[] args) {
          
            int[] arr1 = {1, 2, 3, 4, 5};
            int[] arr2 = {3, 4};
            int[] test = test(arr1, arr2);
            System.out.println(test);
        }
    private static int[] test(int[] arr1,int[] arr2){
    
            int[] arr3 = new int[arr1.length - arr2.length];
            int j=0;
            for (int i = 0; i < arr1.length; i++) {
    
                boolean flag=true;
                for(int l=0; l<arr2.length; l++) {
    
                    if (arr1[i] == arr2[l]) {
                        flag=false;
                        break;
                    }
                }
                if (flag){
                    arr3[j] = arr1[i];
                    j++;
                }
            }
            return arr3;
        }
    

    输出值{1,2,5}我猜你想要得到的结果