这是一个类,因此我们有一些非常特殊的约束。 我们不能使用ArrayList,并且必须对数组进行操作。
假设我有两个数组:
char[] firstArray = new char[]{'a','b'};
char[] secondArray = new char[]{'b','b','c',};
我想将数组返回为:
firstArray = [a];
secondArray = [b,c];
请注意,secondArray仍返回char'b',因为它包含两个,但与firstArray共享一个。
我该怎么做? 我对编码很陌生,所以一种解释就是赞赏 谢谢
答案 0 :(得分:0)
您应该做的第一件事是使用嵌套循环(2个级别)遍历数组以查看它们是否重复。当您遇到重复项时,请增加一个计数器,然后将元素更改为要用作标志的某个字符,以便在结果中不使用该字符。
完成此操作后,您可以根据计数器重新创建比原始数组小的数组
char[] newFirstArray = new char[firstArray.length - counter];
char[] newSecondArray = new char[secondArray.length - counter];
然后遍历原始数组,并将其余的好字符复制到新数组中。
答案 1 :(得分:-1)
我创建了一个对您来说有些麻烦的函数,但是您可能会很容易理解,因此您应该导入import 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);