首页 > 解决方案 > 删除重复元素并返回其新元素和大小的程序

问题描述

我的代码几乎完成了,但问题是在删除重复元素后它应该返回大小的返回大小。它不会输出正确的尺寸。

import java.util.Scanner;
import java.util.Arrays;

public class Main
{
    public static void main (String[] args)
    {
    int size;
    int i;
    int j;
    Scanner scn = new Scanner(System.in);
    
    System.out.print("Enter the number of elements: ");
    size = scn.nextInt();
    System.out.println("\n");
    int myArray[] = new int [size];
    
    for(i = 0; i < size; i++)
    {
        System.out.print("Enter value for num["+i+"]: ");
        myArray[i] = scn.nextInt();
    }
    
    System.out.print("\nThe inputted values are ");
    for(i = 0; i < size; i++)
    {
        System.out.print(" " + myArray[i] + ",");
    }
    
    System.out.print("\nDuplicate values ");
    for (i = 0; i < myArray.length-1; i++)
    {
        for (j = i+1; j < myArray.length; j++)
        {
            if ((myArray[i] == myArray[j]) && (i != j))
            {
                System.out.print(" " +myArray[j]+ ",");
            }
        }
    }
    int length = myArray.length;
    length = remove_dupli(myArray,length);
    
    System.out.print("\nThe new values of the array are ");
    for(i = 0; i < length; i++)
    {
        System.out.print(" " +myArray[i]+", ");
    }  
    System.out.println("\nThe new length of the array is: "+array_sort(myArray));
}

这部分有问题吗?

public static int remove_dupli(int myArray[], int n){  
    if (n==0 || n==1){  
        return n;  
    }  
    int[] temp = new int[n];  
    int j = 0;  
    for (int i=0; i<n-1; i++){  
        if (myArray[i] != myArray[i+1]){  
            temp[j++] = myArray[i];  
        }  
     }  
    temp[j++] = myArray[n-1];  
    
    for (int i=0; i<j; i++){  
        myArray[i] = temp[i];  
    }  
    return j;  
} 

还是这部分?

public static int array_sort(int[] myArray) {
     int index = 1;
    for (int i = 1; i < myArray.length; i++) {
        if (myArray[i] != myArray[index-1])
            myArray[index++] = myArray[i];
    }
  return index;
 }
}

输出应该是:

输入元素数量:4

输入 num[0] 的值:2

输入 num[1] 的值:2

输入 num[2] 的值:3

输入 num[3] 的值:4

输入值为 2,2,3,4

重复值 2,

数组的新值为 2,3,4

数组的新长度为 3

标签: javaarrays

解决方案


您用来查找重复元素的过程很好,但您实际上并没有更改数组中的元素,您只是打印非重复元素,最好的方法是将重复元素的值更改为标志,然后在删除重复项后查找数组的长度,这很容易:

for(int i=0;i<array.length;i++){
    for(int j=i+1;j<array.length;j++)
       {
           if((array[i]==array[j]) && i!=j)
               System.out.println("duplicate value:"array[j]);
               array[j]=-1;
       }
}

因此,现在删除重复元素后的数组长度为:

int count=0;
 for(int i=0;i<array.length;i++){
   if(array[i]!=-1)
    count ++;
 }

推荐阅读