0

在不使用集合的情况下,我编写了一个 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
*/
4

7 回答 7

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
*/
于 2013-04-19T10:59:58.843 回答
1

当有人要求您使用数组时,第一个问题应该是。顺序重要吗?

数组的大多数问题都可以通过首先对其进行排序来解决,然后由于您总是处理相同类型的数据,因此问题会从复杂变得微不足道。正如阿基米德曾经悲伤的那样“给我一个可以站立的地方,我将移动地球”。排序操作就是那个站位。

当您对数组进行排序时,您只需要遍历它并发现下一项等于上一项。这是微不足道的。

但是,如果订单很重要,那么我们的任务就更艰巨了。

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

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

  1. 我们在源数组中找到了 grates 元素。
  2. 我们创建一个大小为 grate 项目的布尔数组。
  3. 我们遍历源列表的每一项,然后
  4. 我们检查布尔数组值的位置是否为假,如果是,那么我们将其设置为真并打印结果,否则我们转到源数组的下一项。

步骤 4 被简化,因为我们要打印列表。返回具有不同价值的新产品的技术方面是微不足道的。

祝你好运。

于 2013-04-19T11:07:07.800 回答
1

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

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

请注意返回数组的大小。

于 2013-04-19T11:02:46.973 回答
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);

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

于 2013-04-19T11:04:10.283 回答
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");
        }

    }
}
于 2015-03-30T15:56:28.143 回答
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);
}
于 2019-11-23T07:12:17.060 回答
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;
}

}

于 2018-01-09T16:08:37.493 回答