java – 从数组中删除重复项(没有集合或排序)

我有以下代码:

import java.util.Scanner;
public class ArrayDuplicates {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("How many numbers are you going to enter? ");
        int num = scan.nextInt();
        int[] arr = new int[num]; // initialize array with user inputted length
        for (int i = 0; i < arr.length; i++) { // enter numbers into array
            arr[i] = scan.nextInt();
        }

        int[] unique = new int[arr.length];    //initialize new array that will hold unique values
        for (int i = 0; i < arr.length; i++) {
            boolean b = true;    //boolean that checks if an element is a duplicate
            for (int j = i+1; j < arr.length; j++) {    //check all elements above int i
                if (arr[i] == arr[j]) {
                    b = false;    // set b to false if there is an existing duplicate
                }
            }
            if (b) {
                unique[i] = arr[i];    // if no duplicates exist, then it is unique.
            }
        }   
        for (int i = 0; i < unique.length; i++) {
                System.out.println(unique[i]);
        }
    }
}

这段代码的问题(除了对大型数组来说非常慢,但这不是重点)是由于唯一数组的未声明元素将设置为0,因此第一个数组中的重复元素将被设置为0 unique [](如果有意义的话).我理解为什么会发生这种情况,但无法找到解决此问题的有效方法.我尝试将复制元素设置为唯一数组中的Integer.MIN_VALUE,然后仅打印unique []的元素,这些元素不等于Integer.MIN_VALUE,但这似乎是问题的弱解决方案.我该如何解决这个问题?

编辑:如果我运行代码:

How many numbers are you going to enter? 4
1
2
2
0

输出:

1
0
2
0

由于数组的第二个元素是重复的,我没有将任何值设置为唯一[1],使其默认为0.如何避免打印0,因为它不是原始数组的一部分?

编辑2:是的,这是家庭作业,但我不想使用集合,排序等的原因主要是我不熟悉它们.另外,由于我没有要求任何人为我编写整个程序,我认为可以请求一些帮助.

解决方法:

我将使用你用来解决问题的工具,因为我的一些东西告诉我这是作业…

import java.util.Scanner;

public class ArrayDuplicates 
{

   public static void main(String[] args) 
   {

      Scanner scan = new Scanner(System.in);

      System.out.print("How many numbers are you going to enter? ");
      int num = scan.nextInt();

      int[] arr = new int[num]; // initialize array with user inputted length

      for (int i = 0; i < arr.length; i++)// enter numbers into array
      {

         arr[i] = scan.nextInt();

      }

      double[] unique = new double[arr.length];    //initialize new array that will hold unique values

      ///////My edit

      for(int z = 0; z < unique.length; z++)
      {

         unique[z] = -0.5;

      }

      ///////

      for (int i = 0; i < arr.length; i++) 
      {

         boolean b = true;    //boolean that checks if an element is a duplicate

         for (int j = i+1; j < arr.length; j++)    //check all elements above int i
         {

            if (arr[i] == arr[j]) 
            {

               b = false;    // set b to false if there is an existing duplicate

            }

         }

         if (b) 
         {

            unique[i] = arr[i];    // if no duplicates exist, then it is unique.

         }

      }   

      for (int i = 0; i < unique.length; i++) 
      {

         if(!(unique[i] == -0.5))
         {

            System.out.println((int)(unique[i]));

         }

      }

   }
}

那么,你看到我在哪里注释了我的编辑?这是新事物,一种非常简单的检查方法是给值一个不期望的数字,在这种情况下是一个负数.现在,这是我的一个假设,将-1改为你知道不会输入扫描仪的任何值. if语句也是如此.

上一篇:c – #include重复发现的任何工具?


下一篇:Python:从嵌套列表中删除重复项