我正在尝试使用方法删除重复的数字并返回非重复的数字,实际上我现在卡在方法中。 这是我的代码:
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;
}
}
答案 0 :(得分:1)
我是否理解您想获得仅出现一次的所有整数?这可以使用集合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;
}
答案 1 :(得分:0)
显然你正在尝试使用多循环元素并将其与其他元素进行比较,因此如果存在该元素的副本,则将其删除并标记其索引。你写的这段代码是错误的,但我现在看到你的主要问题是你将元素与它自己进行比较
我看到if (a[i] == a[i])
是if (a[i] == a[j])
然后你的代码应该工作或抛出索引超出绑定异常
答案 2 :(得分:0)
扫描你的数组中的每个值并相互比较(你应该有一个嵌套的“for”),然后保留一个带有重复索引的列表,实例化一个大小为a.length-listOfDuplicateIndexes.size()的数组。 .....使用[]组件填充此数组,其索引不是int ListOfDuplicateIndexes
答案 3 :(得分:0)
这样做:
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;
}