我需要创建一个从两个数组中提取数字的输出:a
和b
;并打印出唯一的,但只有一次。例如,如果有
int[] a = { 4,3,4,3,6,7,4,8,2,9 };
int[] b = { 2,3,6,8,1,5 };`
输出应为7, 4, 9
不是4, 4, 7, 4, 9
在任务中,它直接说:“不要创建任何辅助数组,集合或字符串。除了标准java.lang之外,不要使用包中的任何类。不能修改数组(特别是,不能对它们进行修改。排序)。打印值的顺序无关紧要。”
我有90%的东西,我只是不能得到一个不重复数字的数组
public class Main {
public static void main(String[] args)
{
int[] a = new int[]{1,2,12,2,3,4,5,6,7,8,9,7,123};
int[] b = new int[]{2,1,3,6,4,5,8,9,12};
for (int i=0;i<a.length;i++)
{
int count =0;
for (int j=0;j<b.length;j++)
{
if(b[j]==a[i])count++;
}
if (count==0) System.out.print(a[i] + " ");
}
}
}
我希望有7 123
。
实际上,它会打印7 7 123
。
我知道这一定是疯狂的简单事情,但我只是一个初学者,还不能将其包裹住。
非常感谢您的帮助。
答案 0 :(得分:0)
在上面的代码中,您正在检查当前数字是否唯一并打印它,但不检查是否已使用该数字。 由于我们不能使用任何其他数据结构或修改现有内容,因此这是避免打印已用数字的一种方法。
public class Main {
public static void main(String[] args)
{
int[] a = new int[]{1,2,12,2,3,4,5,6,7,8,9,7,123};
int[] b = new int[]{2,1,3,6,4,5,8,9,12};
for (int i=0;i<a.length;i++)
{
int count =0;
for (int j=0;j<b.length;j++)
{
if(b[j]==a[i])count++;
}
if (count==0 && !visitedPreviously(i-1, a[i], arr)) System.out.print(a[i] + " ");
}
}
private boolean visitedPreviously(int index, int val, int[] arr){
while(index >= 0){
if(val == arr[index]){
return true;
}
index--;
}
return false;
}
}
答案 1 :(得分:0)
这是查找独特元素的一种方法:
int[] a = new int[]{1, 2, 12, 2, 3, 4, 5, 6, 7, 8, 9, 7, 123};
int[] b = new int[]{2, 1, 3, 6, 4, 5, 8, 9, 12};
Stream<Integer> aStream = Arrays.stream(a).boxed();
Stream<Integer> bStream = Arrays.stream(b).boxed();
Set<Integer> intersection = aStream.collect(Collectors.toSet());
intersection.retainAll(bStream.collect(Collectors.toSet()));
Set<Integer> unique = Stream.concat(aStream, bStream).collect(Collectors.toSet());
unique.removeAll(intersection);
System.out.println(unique);
结果将是:
[7, 123]