我试图在数组中找到重复的数字,但它不起作用。
public class FindDuplicateNumber {
/**
* @param args
*/
public static void main(String[] args) {
int[] arr={10,20,30,40,40,25};
int[] duplicate=duplicateNumber(arr);
for(int dup : duplicate ){
System.out.println("duplicate elements are:\t"+ dup);
}
}
public static int[] duplicateNumber(int[] arr){
int[] duplicate = new int[arr.length];
for(int i=0;i<=arr.length-1;i++){
if(arr[i]==arr[++i]){
duplicate[i]= arr[i];
}
}
return duplicate;
}
}
答案 0 :(得分:1)
永远不要在循环中使用++i
或i++
,除非您真的想跳过正在迭代的数组(或类似)元素之一。
这个
if(arr[i]==arr[++i]){
与
不同if(arr[i]==arr[i+1]){
也就是说,永远不要在++i
也出现的表达式中使用i++
或i
。
<强>后来强>
您很快就会看到另一个问题是用于保存重复项的数组太长。为此,List更合适。
为什么不起作用
附加增量使循环每隔一个元素跳过,因此永远不会比较这对相邻值40。
答案 1 :(得分:1)
您现在正在使用的算法存在一些问题。
我不想为你编写这段代码,因为我觉得这些提示可以解决这个问题。如果您需要更多帮助,请告诉我。
答案 2 :(得分:0)
您尝试的内容与原始数组不合理。一个原因是你事先并不知道你的重复数组应该有多大。此类问题需要使用可修改的数组类型,例如ArrayList。这是一个使用ArrayList和HashSet的简单版本。
如果已添加数字,则HashSet的.add()
方法返回false。
import java.util.HashSet;
import java.util.ArrayList;
import java.util.List;
public class FindDuplicateNumber {
/**
* @param args
*/
public static void main(String[] args) {
int[] arr={10,20,30,40,40,25};
for(Integer dup : duplicateNumber(arr)){
System.out.println("duplicate elements are:\t"+ dup);
}
}
public static List<Integer> duplicateNumber(int[] arr){
HashSet<Integer> set = new HashSet<Integer>();
List<Integer> duplicates = new ArrayList<Integer>();
for (int index = 0; index < arr.length; index++)
if (!set.add(arr[index])) // false if already in set.
duplicates.add(arr[index]);
return duplicates;
}
}