Java,如果数组包含重复值,则返回true

时间:2013-07-22 19:06:48

标签: java arrays sorting boolean jgrasp

如果给定的数组x(由用户在另一个方法中输入)包含重复值,我试图让方法(duplicates)返回true。否则它将返回false。而不是检查整个数组,它被初始化为100,它将仅检查输入的值的数量,这将通过全局计数器跟踪:numElementsInX。

实现这一目标的最佳方法是什么?

public static boolean duplicates (int [] x)

我提示用户数据如下:

public static void readData (int [] x, int i){

    Scanner input = new Scanner(System.in);
    System.out.println("Please enter integers, enter -999 to stop");

    while (i <= 99) {
        int temp = input.nextInt();
            if(temp == -999){
                break;
            }
            else {
                x[i++]=temp;
            }

    // else

}//end while
        printArray(x,i);


}//end readData

public static void printArray(int [] x, int numElementsInX){

int n = numElementsInX;

for (int i = 0; i < n; i++){
    System.out.print(x[i] + " ");


}//end for
        System.out.println();
}//end printArray

我确信有更好的方法可以做到这一点,但这就是我到目前为止的教学方式。

5 个答案:

答案 0 :(得分:4)

这应该这样做。

public boolean containsDuplicates(Integer[] x) {
   return new HashSet<Integer>(Arrays.asList(x)).size() != x.length
}

您不需要numElementsInX,因为它与x.length

相同 在路易斯的评论之后

编辑。 Arrays.asList不适用于int数组。

要将int []转换为Integer,请尝试此问题How to convert int[] to Integer[] in Java?

或做这样的事情(未经过测试但是从记忆中)

Integer[] newArray = new Integer[a.length];
System.arraycopy(a, 0, newArray, 0, a.length);

答案 1 :(得分:4)

以下是一个解决方案:

  • 编译并执行而不抛弃。
  • 根据您的要求使用numElementsInX
  • 找到重复后立即返回。

此方法测试之前是否已看到阵列的每个成员。如果有,该方法可以立即返回。如果没有,则将成员添加到之前看到的集合中。

public static boolean duplicates (int [] x, int numElementsInX ) {
    Set<Integer> set = new HashSet<Integer>();
    for ( int i = 0; i < numElementsInX; ++i ) {
        if ( set.contains( x[i])) {
            return true;
        }
        else {
            set.add(x[i]);
        }
    }
    return false;
}

这是sample program containing the above code

答案 2 :(得分:2)

这肯定不是最有效的方法,但由于你还不知道Sets,你可以使用两个循环:

public static boolean duplicates (int [] x){
    for (int i=0; i<numElementsInX; i++){
        for (int j=i+1; j<numElementsInX; j++){
            if (x[j]==x[i]) return true;
        }
    }
    return false;
}

答案 3 :(得分:0)

&#34; set.add()&#34;如果元素尚未出现在集合中,则返回true,否则返回false。我们可以利用它并摆脱&#34; set.contains()&#34;如上述解决方案。

public static boolean duplicates (int[] x, int numElementsInX) {
    Set<Integer> myset = new HashSet<>();
    for (int i = 0; i < numElementsInX; i++) {
        if (!myset.add(x[i])) {
            return true;
        }
    }
    return false;
}

答案 4 :(得分:0)

对于Java,如果数组包含重复值,则返回true,


boolean containsDuplicates(int[] a) {
    
    HashSet<Integer> hs = new HashSet<>();
    
    for(int i = 0; i<a.length; i++) {
        if(!hs.add(a[i])){
            return true;
        }  
    }   
    return false;
}