use*_*633 4 java arrays counter duplicates
我试图通过创建一个临时数组来删除列表中的重复项,该数组存储重复项所在的索引,然后将原始数组复制到另一个临时数组中,同时将索引与我存储在第一个临时数组中的索引进行比较.
public void removeDuplicates()
{
double tempa [] = new double [items.length];
int counter = 0;
for ( int i = 0; i< numItems ; i++)
{
for(int j = i + 1; j < numItems; j++)
{
if(items[i] ==items[j])
{
tempa[counter] = j;
counter++;
}
}
}
double tempb [] = new double [ items.length];
int counter2 = 0;
int j =0;
for(int i = 0; i < numItems; i++)
{
if(i != tempa[j])
{
tempb[counter2] = items[i];
counter2++;
}
else
{
j++;
}
}
items = tempb;
numItems = counter2;
}
Run Code Online (Sandbox Code Playgroud)
虽然逻辑看似正确,但我的编译器在给我一个arrayindexoutofbounds错误
tempa[counter] = j;
Run Code Online (Sandbox Code Playgroud)
我不明白计数器如何增长到items.length的值以上,逻辑缺陷在哪里?
Ada*_*dam 13
你为自己制造的东西很难.让Java为您做繁重的工作.例如,LinkedHashSet为您提供唯一性并保留插入顺序.它比将每个值与每个其他值进行比较也更有效.
double [] input = {1,2,3,3,4,4};
Set<Double> tmp = new LinkedHashSet<Double>();
for (Double each : input) {
tmp.add(each);
}
double [] output = new double[tmp.size()];
int i = 0;
for (Double each : tmp) {
output[i++] = each;
}
System.out.println(Arrays.toString(output));
Run Code Online (Sandbox Code Playgroud)