繁体   English   中英

如何打印出查找重复项的数组方法?

[英]How can I print out this array method that finds duplicates?

package Practice3;

import java.util.Arrays;
import java.util.Scanner;

public class ray1 {

    public static int[] findDuplicates(int[] userInput)
    {
        for(int i = 0; i< userInput.length; i++)
        {
            for (int j = i+1; j < userInput.length; j++)
            {
                if(userInput[i]==(userInput[j]))
                {
                    System.out.println(userInput[i]);
                }
            }
        }
        return userInput;
    }

    public static void main(String[] args) 
    {
        int[] listOfNumbers = { 1, 2, 3, 4, 1, 2, 3, 1 };

        int[] x = findDuplicates(listOfNumbers);
        Arrays.sort(x);
        System.out.println(Arrays.toString(x));
    }
}

我认为问题可能出在 static void main 中,但我不太确定代码有什么问题。

你返回你得到的输入,所以你当然不会得到重复。 您应该在函数中创建一个哈希集并将重复项添加到其中。

  public static void main(String[] args) {
        int[] listOfNumbers = { 1, 2, 3, 4, 1, 2, 3, 1 };
        ArrayList<Integer> list = new ArrayList<>(findDuplicates(listOfNumbers));
        Collections.sort(list);
        System.out.println(list);
  }
  
  
      public static HashSet<Integer> findDuplicates(int[] userInput) {
        HashSet<Integer> output = new HashSet<Integer>();
        for(int i = 0; i< userInput.length; i++) {
            for (int j = i+1; j < userInput.length; j++) {
                if(userInput[i]== userInput[j]) {
                    output.add(userInput[i]);
                }
            }
        }
        return output;
    }

请注意,我使用返回类型作为 HashSet,它更合适,因为您希望每个重复项出现一次,然后我将其转换为 ArrayList 并打印出来。

根据您的代码, int[] listOfNumbersint[] x是相同的。 您已将int[] listOfNumbers传递给findDuplicates()方法,并在不更改任何内容的情况下返回相同的内容。

如果您试图删除该方法中的重复项,那么您需要在循环中执行某些操作,在其中检查value[i] == value[j] where i!=j

给您的一个建议是,当value[i] != value[j]时尝试将数字添加到Collection ,但当它们相似时则不然。

完成后,在两个循环结束时,您将拥有一个带有唯一编号的Collection 然后,您将能够进行排序和打印。

注意:这不是最简单或最佳的方法,因为 Java 有一个名为Set的概念来收集唯一元素。 首先,如果您可以更改您的方法并弄清楚如何获得这两个循环以满足要求,那就太好了。

我建议首先修复findDuplicates方法来做它应该做的事情。 我的理解是它应该返回一个数组,其中包含在userInput数组中出现多次的值。

一种方法可能是在findDuplicates方法的开头创建一个新数组,并将其命名为例如duplicatedValues 然后,您可以使用其余方法逻辑标识为重复的值填充它。 鉴于你的语句在你的意见之一是,输出应为[ 1, 2, 3 ]我想你也应该改变if声明只接受已经不是价值观duplicatedValues阵列,这甚至可能意味着3 for环形。 否则, duplicatedValues数组本身也将包含重复项。

当您使用“唯一重复项”填充duplicatedValues数组时,您可以返回该数组而不是userInput数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM