[英]return non duplicates numbers in array from method
我正在尝试使用方法删除重复的数字并返回非重复的数字,实际上我现在被卡在方法中。 这是我的代码:
import javax.swing.JOptionPane;
public class duplicateRemover{
public static void main(String[] args) {
int[] array = new int[5];
for (int i=0; i<array.length;i++) {
String s=JOptionPane.showInputDialog(null,"PLEASE ENTER AN INTEGER:","INTEGERS",JOptionPane.QUESTION_MESSAGE);
array[i] = Integer.parseInt(s);
}
removeDuplicates(array);
for (int i=0; i<array.length;i++) {
JOptionPane.showMessageDialog(null,array[i],"UNIQE INTEGERS",JOptionPane.PLAIN_MESSAGE);
}
}
public static int[] removeDuplicates(int a []) {
int []removedDup=new int[a.length];
for (int i = 0; i < a.length; i++) {
for (int j = i-1; j < a.length; j++){
if (a[i] == a[i]) {
removedDup[i] = j;
break;
}
}
我是否理解要获取仅出现一次的所有整数? 使用collections API可以轻松完成此操作。
public static int[] removeDuplicates(int[] a) {
Set<Integer> unique = new TreeSet<Integer>();
List<Integer> results = new ArrayList<Integer>();
for (int i = 0; i < a.length; i++) {
if (!unique.add(a[i]))
results.add(a[i]);
}
int[] ret = new int[results.size()];
for (int i = 0; i < results.size(); i++)
ret[i] = results.get(i);
return ret;
}
显然,您正在尝试对元素进行多循环并将其与其他元素进行比较,因此,如果该元素存在重复,则将其删除并标记其索引。 您编写的这段代码有错误,但是我现在看到的主要问题是您将元素与它自己比较,我看到if (a[i] == a[i])
if (a[i] == a[j])
那么您的代码应该可以工作或将索引抛出绑定异常
扫描数组中的每个值,并将其相互比较(您应该有一个嵌套的“ for”),然后保留一个包含重复项索引的列表,实例化一个大小为a.length-listOfDuplicateIndexes.size()的数组。 ..用[]索引不是int ListOfDuplicateIndexes的[]组件填充此数组
这样可以:
public static int[] removeDuplicates(int a[]) {
int n = a.length;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n;) {
if (a[j] == a[i]) {
for (int k = j; k < n-1; k++)
a[k] = a[k + 1];
n--;
} else
j++;
}
}
int[] newArray = new int[n];
System.arraycopy(a, 0, newArray, 0, n);
return newArray;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.