从Core Java中的Array中删除重复元素

时间:2013-04-19 10:36:46

标签: java

不使用集合,我编写了一个java程序来从整数数组中删除重复的整数元素,但程序只删除一个整数元素而剩下的其他整数元素。

你能让我知道如何在下面的核心java程序中删除重复的整数元素。在下面的核心java程序中我必须删除重复的整数元素5

提供的帮助将不胜感激。

以下是Java代码。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class DeleteElementFromArray {

    static int[] a = {5,1,2,3,4,5,7,8,9,10};
    static int[] b = new int[10];
    static int i, k, f, j = 0;
    static int l = a.length;

    void DeletElementInt() {
         for (i = 0; i < l; i++) {
             if (i != k) {
                   if (i < k) {
                       b[i] = a[i];
                   } else{                    
                         b[i - 1] = a[i];
                   }  
             }
         }
     }       



    public static void main(String[] args) {
          DeleteElementFromArray d = new DeleteElementFromArray();
          System.out.println("Array Elements are ");
          for (i = 0; i < l; i++){
            System.out.println(a[i]); 
          }
          InputStreamReader is = new InputStreamReader(System.in);
          BufferedReader br = new BufferedReader(is);
          System.out.println("Enter the Element for Delete");
          try {
             String s = br.readLine();
             f = Integer.parseInt(s);
              for (i = 0; i < l; i++) {
                if (f == a[i]) {
                  System.out.println("Delete Element found from given array");
                  k = i;
                  j++;
                  d.DeletElementInt();
                }
              }
                 l = l - 1;
                 System.out.println("New Array ");
                 for (i = 0; i < l; i++) 
                 {
                      System.out.println(b[i]);
                 }
                 if (j == 0) {
                   System.out.println("Entered Element does not found from given array");
                 }
          } catch (IOException e) {
                System.out.println(e);
          }
    }
}


//output
/*
Array Elements are 
5
1
2
3
4
5
7
8
9
10
Enter the Element for Delete
5
Delete Element found from given array
New Array 
1
2
3
4
5
7
8
9
10
*/

7 个答案:

答案 0 :(得分:2)

这是固定代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class DelElem {

    static int[] a = {5,1,2,3,4,5,7,8,9,10};
    static int[] b = new int[10];
    static int f, i, k, j = 0;
    static int l = a.length;

    static void DeleteElementInt(int elementToDelete) {
        j = 0;
        for (int i = 0; i < l; i++)
            if (a[i] != elementToDelete)
                b[i - j] = a[i];
            else
                ++j;
    }



    public static void main(String[] args) {
        System.out.println("Array elements are:");
        for (i = 0; i < a.length; i++)
            System.out.println(a[i]);
        InputStreamReader is = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(is);
        System.out.print("Enter the element to be deleted: ");
        try {
            String s = br.readLine();
            f = Integer.parseInt(s);
            DeleteElementInt(f);
            System.out.println("New array:");
            for (i = 0; i < l - j; i++)
                System.out.println(b[i]);
            if (j == 0)
                System.out.println("Entered element was not found in the given array");
        } catch (IOException e) {
            System.out.println(e);
        }
    }
}


//output
/*
Array elements are:
5
1
2
3
4
5
7
8
9
10
Enter the element to be deleted: 5
New array:
1
2
3
4
7
8
9
10
*/

答案 1 :(得分:1)

首先,您必须对数组进行排序。如果你这样做,你将更容易删除重复项。 Arrays类包含各种方法(大多数是静态的)来操作数组。使用Arrays.sort(array)。如果您不被允许,则必须使用众多现有排序算法中的一种。最简单的是Bubble sort

在结果数组中插入第一个整​​数,并在包含最后插入值的临时变量中插入。解析源数组:如果当前值与临时var不同,则将其插入结果数组中(并更新temp var)。

小心返回数组的大小。

答案 2 :(得分:1)

Arrays.sort()好吗?

static int[] a = {5,1,2,3,4,5,7,8,9,10};
static int[] b = new int[a.length];

Arrays.sort(a);

b[0]=a[0];
int bIndex = 1;
for(int aIndex = 1; aIndex < a.length; aIndex++) {
    if(b[bIndex-1] != a[aIndex]) {
        b[bIndex] = a[aIndex];
        bIndex++;
    }
}

int[] result = Arrays.copyOfRange(b, 0, bIndex);

如果这是出于教育目的,另一个有趣的方法可能是用数字构造树结构,并在完成所有插入后将树展平为数组。

答案 3 :(得分:1)

当有人要求你使用数组时,第一个问题应该是。订单重要吗?

数组的大多数问题都可以通过先对其进行排序来解决,然后由于您始终处理相同类型的数据,问题会从复杂的问题中减少。阿基米德曾经悲伤过“给我一个站立的地方,我会移动地球”。排序操作是站立的。

当你对数组进行排序时,你只需要遍历它并找到下一个项目等于之前的项目。这是微不足道的。

如果订单很重要,那么我们的任务就更难了。

因此,我想到的第一个解决方案是创造新的立场。规则是数组的项目更大或等于零。

在这种情况下,我们可以做这样的事情。

  1. 我们在源数组中找到grates元素。
  2. 我们创建一个大小为grates项的布尔数组。
  3. 我们浏览源列表的每个项目和
  4. 我们检查boolean数组的值是否为false,如果是,那么我们将其设置为true,打印结果,否则我们转到源数组的下一项。
  5. 我们想要打印列表,简化了步骤4。返回具有不同值的新方法的技术方面是微不足道的。

    祝你好运。

答案 4 :(得分:0)

import java.util.Scanner;

public class RemoveAllOccurences{

    static int[] removeAll(int[] a,int n){
        int[] dupl = new int[a.length];
        for(int i = 0;i < dupl.length;i++){
            dupl[i] = -999;
        }
        int index = 0;
        //looping over,finding all occurrences of n and creating new array that does not contain n.
        for(int i = 0;i < a.length;i++){
            if(a[i] != n){
                dupl[index++] = a[i];
            }
        }

        //returning array with all duplicates removed.
        return dupl;
    }

    public static void main(String[] args) {

        int[] a = {3,5,5,5,3,6,5,3,3};
        int numberToRemove;

        System.out.println("the array values are:");
        for(int i:a){
            System.out.print(a[i]+"\t");
        }

        Scanner sc = new Scanner(System.in);
        System.out.println("\nenter the number for which all occurences need to be deleted:");

        numberToRemove = sc.nextInt();

        int[] b = removeAll(a,numberToRemove);

        System.out.println("After removing all occurences of "+numberToRemove);
        for(int i:b){
            if(i != -999)
                System.out.print(i+"\t");
        }

    }
}

答案 5 :(得分:0)

以下是我的解决方案:

第一步: - 使用嵌套循环遍历数组以查找重复项 第二步: - 如果发现重复,则复制除重复元素之外的新数组中的所有元素。

请查看以下代码,我们将不胜感激。

公共类DuplicateElements {

private static int[] arr = new int[]{3,2,4,4,5,3,8,2,4,9,10};

public static void main(String[] args) {
    for(int i=0;i<arr.length;i++){
        int arr_i = arr[i];
        for(int j=0;j<arr.length;j++){
            if(arr_i == arr[j] && i != j){
                removeElement(j);
            }
        }
    }

    for(int i=0;i<arr.length;i++){
        System.out.print(arr[i]+", ");
    }
}

public static void removeElement(int position){
    int[] intArr = new int[arr.length - 1];
    for(int i=0;i<position;i++){
        intArr[i] = arr[i];
    }
    for(int i=position+1;i<arr.length;i++){
        intArr[i-1] = arr[i];
    }
    arr = intArr;
}

}

答案 6 :(得分:0)

public static void main(String[] args) {
    int a[]={1,4,3,2,6,5,7,3,5,4,2};
    int b[]=new int[a.length];
    Arrays.sort(a);
    int j=0;
    for(int i=0;i<a.length;i++){
        while(i<a.length-1 && a[i]==a[i+1]){
            a[i]=999;  // This can be any tag which you are not going to have in your array
            i++;
        }
        if(a[i]!=999)
            b[j++]=a[i];
    }

    System.out.println(b);
}