public class Practise {
public static void main(String[] args) {
Set<Integer> set = new HashSet<Integer>();
int[] array = { 1, 1, 2, 3, 4, 5, 6, 7, 8, 8 };
for (int i = 0; i < array.length; i++) {
for (int j = 1; j < array.length; j++) {
if (array[i] == array[j] && i != j) {
set.add(array[i]);
}
}
}
System.out.println(set);
}
}
这是我的代码我能够找到重复的元素1和8,但我想它的位置也在设置这些项目在哪个位置请建议我如何实现它。我必须得到所有重复的项目第二位置我的意思是int [] array = {1,1,2,3,4,5,6,7,8,8};它应该显示1位于第一位置,8位于第9位
答案 0 :(得分:1)
public class Practise {
public static void main(String[] args) {
Map<Integer, Integer> result = new HashMap<Integer, Integer>();
int[] array = { 1, 1, 2, 3, 4, 5, 6, 7, 8, 8 };
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
if (array[i] == array[j] && i != j) {
result.put(i, array[i]);
}
}
}
System.out.println(result);
}
}
答案 1 :(得分:1)
如果您想知道副本的位置,那就很容易了。正如@Kagemusha已经提到的,add
的方法Set
如果添加了元素则返回true
,如果元素已经存在于集合中则返回false
。所以你唯一需要做的就是:
for (int i = 0; i < array.length; i++) {
if(!set.add(array[i]) {
//i is now the position of the duplicate
duplicate_position = i;
}
}
编辑:我看到@LiuJie也添加了正确答案。我仍然想为我的解决方案提供一个案例。在你的情况下有这么小的数组没有太大的区别,但他的答案的复杂性是O(n ^ 2)(我们真的想避免这种复杂性)我的解决方案只有O(n)(它确实需要额外的空间,但只有你不打算使用该集合)。
答案 2 :(得分:0)
System.Timers.Timer sysTimer = new System.Timers.Timer(TimeSpan.FromSeconds(5).TotalMilliseconds);
sysTimer.Elapsed += (s, e) =>TestMethod();
sysTimer.Enabled = true;
答案 3 :(得分:0)
我写了这个简单的逻辑,打印所有重复的数字及其位置
int[] arr = {0, 1, 2, 3, 4, 3, 5, 6, 4, 7, 8, 7, 8};
for(int i=0; i<arr.length;i++){
for(int j=i+1; j<arr.length;j++){
if(arr[i] == arr[j]){
System.out.println("Number: "+arr[i]+" found repeating at position: "+i+" , repeated at position "+j);
}
}
}