消除数组中的重复项

时间:2018-11-05 01:56:20

标签: java arrays

我有一位教授希望我们使用方法标头    公共静态int [] excludeDuplicates(int [] arr) 该程序使用随机生成的数组来查看是否存在重复项,但用户对随机数组具有多少索引进行了限制。这是我的东西,但是没用。

import java.util.Random;
import java.util.Scanner;
public class Dublicates
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        Random generator = new Random();

        System.out.println("Enter array length: ");
        int[] a = new int[input.nextInt()];

        for (int i = 0; i<a.length; i++)
        {
            a[i] = generator.nextInt(a.length*2);
        }
        int[] result = eliminateDuplicates(a);
        System.out.println("The new numbers are: " + result.length);
        System.out.println("The double numbers were:");
        for (int b : result)
        {
            System.out.println(b + " ");
        }
    }
    public static int[] eliminateDuplicates(int[] arr)
    {
        int[] temp = new int[arr.length];
        int size = 0;
        for (int i = 0; i < arr.length; i++) {
            if (linearSearch(temp, arr[i]) == -1) {
                temp[size] = arr[i];
                size++;
            }
            int[] result = new int[size];
            for (int i = 0; i < size; i++) {
                result[i] = temp[i];
            }
            {
                return result;

            }
        }
    }
    public static int linearSearch(int[] arr, int key)
    {
        for(int i = 0; i<arr.length; i++)
        {
            if (key == arr[i])
                return i;
        }
        return -1;
    }
}

2 个答案:

答案 0 :(得分:1)

由于产生最终结果的语句在for循环内,因此for内的语句将只运行一次,而不会给出正确的答案。

因此,您必须按以下步骤更改代码。

public static int[] eliminateDuplicates(int[] arr)
{
    int[] temp = new int[arr.length];
    int size = 0;
    for (int i = 0; i < arr.length; i++) {
        if (linearSearch(temp, arr[i]) == -1) {
            temp[size] = arr[i];
            size++;
        }
    }
    int[] result = new int[size];
    for (int i = 0; i < size; i++) {
        result[i] = temp[i];
    }

    return result;
}

答案 1 :(得分:0)

整数数组中的默认值为0,Random.nextInt()可以生成0个随机值,当您运行线性搜索时,最终的结果数组中将不包含0。 我修改了Random.nextInt()使其不会生成0个随机数:

import java.util.Random;
import java.util.Scanner;
public class HelloCodiva
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        Random generator = new Random();

        System.out.println("Enter array length: ");
        int[] a = new int[input.nextInt()];      

        for (int i = 0; i<a.length; i++){
            a[i] = generator.nextInt(a.length*2)+1;//So that 0 is not generated
        }

        int[] result = eliminateDuplicates(a);

        for (int originalValue: a){
            System.out.println(originalValue+ " ");
        }

        System.out.println("The new numbers are: " + result.length);
        System.out.println("The double numbers were:");

        for (int b : result){
            System.out.println(b + " ");
        }
}

    public static int[] eliminateDuplicates(int[] arr)
    {
        int[] temp = new int[arr.length];
        int size = 0;
        for (int i = 0; i < arr.length; i++) {
            if (linearSearch(temp, arr[i]) == -1) {
                temp[size] = arr[i];
                size++;
            }
        }

        int[] result = new int[size];       
        System.arraycopy(temp, 0, result, 0, size);
       return result;
    }

    public static int linearSearch(int[] arr, int key)
    {
        for(int i = 0; i<arr.length; i++)
        {
            if (key == arr[i])
                return i;
        }
        return -1;
    }
}