如果给定的数组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
我确信有更好的方法可以做到这一点,但这就是我到目前为止的教学方式。
答案 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;
}
答案 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;
}