【问题标题】:Eliminateing duplicates in an array消除数组中的重复项
【发布时间】:2019-04-08 09:32:09
【问题描述】:

我有一位教授希望我们使用方法标题 公共静态 int[] 消除重复项(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;
    }
}

【问题讨论】:

  • 你的 return 语句在你的 for 循环中
  • “但它不起作用”究竟是什么意思?会发生什么?您预计会发生什么?
  • 把你的内循环放在外循环之外

标签: java arrays


【解决方案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;
}

【讨论】:

  • 它不会起作用,因为generator.nextInt(a.length*2) 可以生成 0 并且默认情况下,数组 temp 在其每个索引中初始化为 0。所以这个数组上的线性搜索将不起作用
【解决方案2】:

整数数组中的默认值为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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多