我试图让一个方法(重复)如果给定的名为x的数组(由用户在另一个方法中输入)包含重复值,则返回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


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

最佳答案

这里是一个解决方案:


编译并执行而不会抛出。
根据需要使用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

09-30 13:58
查看更多