我尝试为每个循环在数组中查找重复项,如果我在每个循环的外部打印变量“ i”,则会提供意外的输出。
预期:相关错误,例如未声明变量(因为声明的变量是局部变量)
package Login;
public class DupsArray {
public static void main(String[] args) {
int[] a = {1, 2, 3, 3};
int length = a.length;
for (int i : a) {
for (int j = i + 1; j <= length - 1; j++) {
if (a[i] == a[j]) {
System.out.println("Found duplicate" + a[i]);
break;
}
System.out.print(i);
}
}
}
}
11找到重复项3
答案 0 :(得分:2)
您正在使用i
迭代数组a
的值(不是索引)和j
来迭代索引。
建议:可以使用ArrayList
而不是使用数组来简化代码:
对列表进行迭代,对于任何item
与array.indexOf(item)
进行比较,如果array.lastIndexOf(item)
与 article.result > section.content{
border-top:1px solid red;
}
article.result > section.content:first-of-type{
border-top:none;
}
比较-您发现重复项!
答案 1 :(得分:1)
我认为您应该在没有增强的for
循环的情况下执行此操作,因为需要进行索引比较以避免误报,例如您将元素i == 3
与元素a[j] == 3
进行了比较,这可能是相同的,但是您如何确定呢?
要解决此问题,您需要一个indexOf
,以便将其归结为再次进行索引比较。
我将使用两个经典的for
循环并比较索引,跳过相等的索引:
public static void main(String args[]) throws Exception {
// the source to be investigated
int[] a = {1, 2, 3, 3};
// a container for duplicates found
Set<Integer> dups = new HashSet<>();
// iterate your elements of the source array
for (int i = 0; i < a.length; i++) {
// compare each one to the others
for (int j = i + 1; j < a.length; j++) {
// find out if the elements are equal
if (a[i] == a[j]) {
// if they are, add it to the set of duplicates
dups.add(a[i]);
// as an alternative, you could print them here, too
// System.out.println("Duplicate found: " + a[i]);
}
}
}
// print the duplicates found
System.out.println("Duplicates found: ");
dups.forEach(d -> System.out.println(d));
}
请阅读代码注释,请注意,如果只想打印重复项,则不必存储重复项。需要存储以进行进一步处理或稍后再打印(可能根据需要)。