Java 删除两个字符数组之间的公共字符

Java 删除两个字符数组之间的公共字符,java,arrays,Java,Arrays,这是针对一个类的,所以我们有一些非常特殊的约束。 我们不能使用ArrayList,操作必须使用数组 假设我有两个数组: char[] firstArray = new char[]{'a','b'}; char[] secondArray = new char[]{'b','b','c',}; 我想将数组返回为: firstArray = [a]; secondArray = [b,c]; 请注意,secondArray仍然返回一个字符“b”,因为它包含两个字符,但只与firstArra

这是针对一个类的,所以我们有一些非常特殊的约束。 我们不能使用ArrayList,操作必须使用数组

假设我有两个数组:

char[] firstArray = new char[]{'a','b'};
char[] secondArray = new char[]{'b','b','c',};
我想将数组返回为:

 firstArray = [a];
 secondArray = [b,c];
请注意,secondArray仍然返回一个字符“b”,因为它包含两个字符,但只与firstArray共享一个字符

我该怎么做? 我对编码相当陌生,所以解释就是欣赏
谢谢

您应该做的第一件事是使用嵌套循环2层遍历数组,查看它们是否有重复项。当遇到重复时,增加一个计数器,并将元素更改为要用作标志的某个字符,以便在结果中不使用它

完成后,可以基于计数器重新创建比原始阵列小的新阵列

char[] newFirstArray = new char[firstArray.length - counter];
char[] newSecondArray = new char[secondArray.length - counter];

然后遍历原始数组并将剩余的好字符复制到新数组中。

我创建了一个函数,该函数对您来说有些复杂,但您可能很容易理解,您应该导入java.util.*;要使用它:

功能:-

ArrayList<char[]> results(char[] a, char[] b) {
    ArrayList<Character> res1 = new ArrayList<>();
    ArrayList<Character> res2 = new ArrayList<>();

    for (int i = 0; i < a.length; i++) {
        res1.add(a[i]);
    }

    for (int i = 0; i < b.length; i++) {
        res2.add(b[i]);
    }

    ArrayList<Integer> a_commons = new ArrayList<>();
    ArrayList<Integer> b_commons = new ArrayList<>();

    for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < b.length; j++) {
            if (res1.get(i).equals(res2.get(j))) {
                a_commons.add(i);
                b_commons.add(j);
                break;
            }
        }
    }

    Collections.sort(a_commons, Collections.reverseOrder());
    Collections.sort(b_commons, Collections.reverseOrder());

    for (int common_number : a_commons) {
        res1.remove(common_number);
    }

    for (int common_number : b_commons) {
        res2.remove(common_number);
    }

    char[] a_res = new char[res1.size()];
    char[] b_res = new char[res2.size()];

    for (int i = 0; i < res1.size(); i++) {
        a_res[i] = res1.get(i);
    }

    for (int i = 0; i < res2.size(); i++) {
        b_res[i] = res2.get(i);
    }

    ArrayList<char[]> result = new ArrayList<>();
    result.add(a_res);
    result.add(b_res);
    return result;
}
使用它:-

char[] a = new char[]{'a','b'};
char[] b = new char[]{'b','b', 'c', 'a'};

ArrayList<char[]> res = results(a,b);

char[] a_RESULT = res.get(0);
char[] b_RESULT = res.get(1);

数组是否保证按字母顺序排序?是的,它们可以按字母顺序排序。这不保证,但这只意味着使用正确的排序方法?请提出更具体的问题。如果你上java课,在教授/老师给你做这个练习之前,你会讨论一些概念。尝试使用这些概念来解决问题,最有可能的是循环。如果你对循环有特别的问题,请改为问那些问题。@Turing85当我问这个问题时,我希望能有一对简单的句子。如果不是这样的话,我会想办法处理一些混乱的循环。谢谢你的建议。@Elaredo问SO问题的惯例是包括你尝试过的内容、示例代码等。尊敬的是,我们不是来为人们做家庭作业的。然而,我们在这里帮助您编写更干净和/或更优化的代码,帮助您理解为什么您编写的代码不能按预期工作,等等。为了让您开始,请考虑如何将数组相互比较,并删除最终答案中不包含的元素。如果您编写了一些代码并遇到了问题,请随意提出一个新问题,并附上代码示例和获得的结果。完整阅读答案,然后,如果您看到我仅用于查找结果,而结果不是arraylist,您可以发表您的评论。我会要求您阅读OP的问题。”我们不能使用ArrayList,操作必须使用arrays。谢谢你的帮助@Elaredo请检查我的答案,如果它有助于引导您找到解决方案。