这个问题是这个问题的后续问题.
10-21=-11 10-34=-24 10-45=-35 10-56=-46 21-10=11 < 21-34=-13 21-45=-24 21-56=-24 21-56=-35 34-10=24 34-21=-11 34-45=-22 45-10=35 45-21=11 << 45-34=11 <<< 45-56=46 56-21=35 56-34=22 56-45-45=11<<<
Set<Integer> tchars = new HashSet<>();
tchars.add(10);
tchars.add(21);
tchars.add(34);
tchars.add(45);
tchars.add(56);
int number = 11;
int counter = 0;
Iterator it = tchars.iterator();
while (it.hasNext()) {
Integer inte = (Integer) it.next();
if (tchars.contains(inte + number)) {
System.err.println(inte + " " + number);
counter++;
}
}
System.err.println(counter);发布于 2014-09-17 05:38:41
使用集合是有问题的。
首先,正如“Vogel612 612”S评论中的原始问题所指出的那样,它限制了重复值。其次,它还使代码变得更加混乱,因为您现在正在获取一个Iterator,调用.hasNext(),并在while循环中进行测试,而不是使用更简洁的语法。
我只需要使用一个List<Integer>,去掉所有的强制转换,使用一个for-每种样式的语法,而不是使用Iterator。最后,在这个片段的上下文中,number和counter作为变量名并不是非常有意义的。如果它们在更广泛的背景下是有意义的,无论它来自何处,但我发现类似于difference和result的东西要清晰得多。
更像是这样的:
List<Integer> tchars = Arrays.asList(10, 21, 34, 45, 56);
int difference = 11;
int result = 0;
for (int test : tchars) {
if (tchars.contains(test + difference)) {
System.err.println(test + " " + difference);
result++;
}
}
System.err.println(result);非常简单,你可以立即看到它在做什么。
https://codereview.stackexchange.com/questions/63110
复制相似问题