使用数组A的元素填充一个新数组,这些元素缺少数组B - Java

ram*_*eez 7 java arrays

所以,基本上我有两个数组:

int[] listA = {2, -5, -121, 102, -35, -2, 0, -125, 802, -10};
int[] listB = {6, 99, -1, 12, 1, -2};
Run Code Online (Sandbox Code Playgroud)

我想填写一个新的数组(listD)所有listA缺少的元素listB.

输出应该是这样的:

输出:2,-5,-121,102,-35,0,-125,802,-10

我的代码如下:

int arraySize = 0; //Variable to determine size of the new array;
int difElements = 0; //Variable to count every different element;

for(int i = 0; i < listA.length; i++){
    for(int j = 0; j < listB.length; j++){
        if(listA[i] != listB[j]){
            difElements++;
        }
        if(difElements == listB.length){
        arraySize++;
    }

    }
     difElements = 0;
}
System.out.println("Size of the array with different elements : " + arraySize);

int[] listD = new int [arraySize]; //Declaring array with specified size;
Run Code Online (Sandbox Code Playgroud)

然后我使用以下for循环来运行两个数组并检查是否有重复的元素:

for (int i = 0; i < listA.length; i++) {
    for (int j = 0; j < listB.length; j++) {
        if (listA[i] != listB[j]) {
            listD[i] = listA[i];
        } else {
            listD[i] = listA[i + 1];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道循环有什么问题,使用调试器很容易看出它出错的地方,但此时我只是在圈中运行并编码相同的错误...循环后找到重复的元素我不能找到一种规范化条件(listD[i] = listA[i])的方法,因为它跳过了一个位置.也许我需要另一个循环来迭代通过listD但我从来没有嵌套过三个循环...

请记住这是非常基本的java编程,这些只是我班级的练习,以获得java编程的基础知识.我不知道任何POO,课程,方法等等,当然也不能应用它们.

Kir*_*nov 2

我建议您使用一个临时数组(例如listC)来存储我们需要复制的元素的位置。

第一次迭代两个数组时,您将计算新数组的大小,并在元素唯一时设置标志。

然后你迭代listC并复制其中的独特元素listA

int[] listA = {2, -5, -121, 102, -35, -2, 0, -125, 802, -10, 7, 555};
int[] listB = {6, 99, -1, 12, 1, -2, 7, 555};

// array of flags indicating which elements of listA to copy
int[] listC = new int[listA.length];

// counter of unique elements from listA
int counter = 0;

for (int i = 0; i < listA.length; i++) {
    boolean contains = false;
    //simplified form of for loop if you don't use an index
    for (int b: listB) {
        if (listA[i] == b) {
            contains = true;
            break;
        }
    }
    if (!contains) {
        counter++;
        //setting listC[i] to 1 if listA[i] is not present in listB
        listC[i] = 1;
    }
}

// declaring array with specified size 
int[] listD = new int[counter];

counter = 0;

// iterating through the array of flags to copy unique elements
for (int i = 0; i < listC.length; i++) {
    if (listC[i] == 1) {
        listD[counter++] = listA[i];
    }
}

System.out.println(Arrays.toString(listD));
Run Code Online (Sandbox Code Playgroud)