我有以下代码片段,并希望打印数组a []
的唯一元素
我想通过返回一个数组在main方法中打印结果。
以下代码返回结果 - 10 20 21 34 0 56 65 0 76 67 45 55 0 99 23 0 0 0 12
任何人都可以告诉我我在做错的地方吗?
public class uniqueElements {
static int[] newArr=null;
public static void main(String[] args){
int[] a=new int[] {10,20,21,34,21,56,65,65,76,67,45,55,10,99,23,67,99,34,12};
int[] b=uniqueElements(a);
for(int i:b){
System.out.print(i+" ");
}
}
private static int[] uniqueElements(int[] arr) {
newArr=new int[arr.length];
for(int i=0;i<arr.length;i++){
boolean isDistinct = false;
for(int j=0;j<i;j++){
if(arr[i] == arr[j]){
isDistinct = true;
break;
}
}
if(!isDistinct){
newArr[i]=arr[i];
}
}
return newArr;
}
}
答案 0 :(得分:2)
如果您只想要唯一值,也可以使用Set:
http://docs.oracle.com/javase/7/docs/api/java/util/Set.html
Set<Integer> b = new HashSet<Integer>(Arrays.asList(a));
但如果您仍想手动完成,您可以像其他人所说的那样做。
答案 1 :(得分:1)
将输入数组中的不同值复制到输出数组中的相同索引,这意味着重复值的索引将保持为0,这是您在输出中看到的。
可能的解决方案:
private static int[] uniqueElements(int[] arr)
{
newArr=new int[arr.length];
int count = 0;
for(int i=0;i<arr.length;i++){
boolean isDistinct = false;
for(int j=0;j<i;j++){
if(arr[i] == arr[j]){
isDistinct = true;
break;
}
}
if(!isDistinct) {
newArr[count]=arr[i];
count++;
}
}
return newArr;
}
这将返回一个数组,其第一个count
元素是输入数组的唯一值。最后它仍然会有一些0。要消除这些0,您可以创建一个新的count
元素数组,并将count
的{{1}}元素复制到其中。
顺便说一下,你的newArr
标志与其名称含义完全相反。当您找到重复项时,将其设置为true。
答案 2 :(得分:1)
删除重复元素的最简单方法是将内容添加到Set(不允许重复),然后将Set添加回ArrayList
public class uniqueElements {
static int[] newArr=null;
public static void main(String[] args){
int[] a=new int[] {10,20,21,34,21,56,65,65,76,67,45,55,10,99,23,67,99,34,12};
int[] b=uniqueElements(a);
for(int i:b){
System.out.print(i+" ");
}
}
private static int[] uniqueElements(int[] a) {
// add elements to a, including duplicates
HashSet hs = new HashSet();
hs.addAll(a);
a.clear();
a.addAll(hs);
return a;
}
}