从阵列中删除重复项
我需要一些帮助,伙计们。 这是分配:创建一个程序,以从随机数组中删除所有重复项。例如,如果阵列具有的值 4,7,10,4,9,5,10,7,3,5 则数组应改为 4,7,10,9,5,3从阵列中删除重复项
程序应该由两个类DeleteDuplicate和DeleteDuplicateDemo组成。
DeleteDuplicate类应执行以下操作 1.有一个方法来检查重复值。阵列 3. currentsize的 2.跟踪有删除重复的方法(与数组中的下一个值代替重复的值。)
的DeleteDuplicateDemo类应做到以下几点 1.让你的主要方法。 2.创建一个长度为10到10的数字的随机数组。 3.显示原始随机数组。 4.调用DeleteDuplicate方法来查找和删除重复项。 5.显示没有重复的新阵列。
样本输出: [8,5,7,3,2,5,6,3,6,7]
[8,5,7,3,2,6]
下面是DeleteDuplicateDemo代码:
import java.util.*;
public class DeleteDuplicateDemo
{
public static void main(String[] args)
{
Random random = new Random();
int array[]= new int[10];
for (int i = 0; i < array.length; i++)
{
array[i] = random.nextInt(10)+ 1;
}
for (int i = 0; i < array.length; i++)
{
System.out.print(array[i] + " ");
}
System.out.println();
DeleteDuplicate class1 = new DeleteDuplicate();
array = class1.removeDuplicates(array);
for (int i = 0; i < array.length; i++)
{
System.out.print(array[i] + " ");
}
}
}
这里是DeleteDuplicate代码:
import java.util.Arrays;
public class DeleteDuplicate
{
private static int[] remove(int[] array)
{
int current = array[0];
boolean found = false;
for (int i = 0; i < array.length; i++)
{
if (current == array[i] && !found)
{
found = true;
}
else if (current != array[i])
{
System.out.print(" " + current);
current = array[i];
found = false;
}
}
System.out.print(" " + current);
return array;
}
public static int[] removeDuplicates(int[] array) {
// Sorting array to bring duplicates together
Arrays.sort(array);
int[] finalArray = new int[array.length];
int previous = array[0];
finalArray[0] = previous;
for (int i = 1; i < array.length; i++){
int value = array[i];
if (previous != value){
finalArray[i] = value;
}
previous = value;
}
return finalArray;
}
}
我怎样才能使它发挥作用?我只有在打电话给另一个班时遇到问题。谢谢!
在你DeleteDuplicateDemo
类,改变
DeleteDuplicate class1 = new DeleteDuplicate();
array = class1.removeDuplicates(array);
到
array = DeleteDuplicate.removeDuplicates(array);
在你DeleteDuplicate
类,改变
for (int i = 1; i < array.length; i++){
int value = array[i];
if (previous != value){
finalArray[i] = value;
}
previous = value;
}
到
for (int i = 1, j = 0; i < array.length; i++){
int value = array[i];
if (previous != value){
finalArray[j] = value;
j++;
}
previous = value;
}
然后,当您第二次向控制台打印出array
的值时,请务必在打印前检查array[i] != null
array[i]
。
删除代码过于复杂:如果您写入的数据与写入的数据不同,则不必通过从索引1
开始的数组遍历数组,而是单独创建一个删除项目的方法在索引i-1
项目:
int rdIndex = 1;
int wrIndex = 1;
while (rdIndex != array.length) {
if (array[wrIndex-1] != array[rdIndex]) {
array[wrIndex++] = array[rdIndex];
}
rdIndex++;
}
return Arrays.copyOf(array, wrIndex);
在循环wrIndex
的端部指示要被复制到结果数组的项数。
非常感谢。我希望我可以使用wrIndex,但我需要以一种复杂的方式来完成。所以数组打印出来,然而,它删除了数组中最小的值,并将0代入删除的数字中。 –
试试这个。
public static int[] removeDuplicates(int[] array) {
return IntStream.of(array).distinct().toArray();
}
测试:
int[] array = {8, 5, 7, 3, 2, 5, 6, 3, 6, 7};
System.out.println(Arrays.toString(removeDuplicates(array)));
// -> [8, 5, 7, 3, 2, 6]
'我只有与调用另一个class.'一个问题,是什么问题?我看到的明显问题是'removeDuplicates'是静态的,所以你不需要'DeleteDuplicate'实例来调用它。另外,如果你发现一个重复的'i'仍然增加,所以你的'finalArray'中有“漏洞” - 是否有意? – John3136
remove()应该做什么?我看到你使用布尔查找找到重复,但你实际上并没有将它用于循环之外的任何其他地方。 –
remove()应该检查重复项并跟踪当前大小。问题是我不确定如何从另一个类DeleteDuplicate调用方法。下面的评论员对此有所帮助,但现在代码删除了最小值,并将0代入删除的值。 –