【发布时间】:2015-03-15 04:08:46
【问题描述】:
我将每个元素作为“sum”、“first”和“sec”。如果 (first + sec
public void findTriangle(int[] a){
HashSet<HashSet<Integer>> triangle = new HashSet<HashSet<Integer>>();
HashSet<Integer> tmp;
for(int i=0;i<a.length;i++){
int sum=a[i];
for(int j=0;j<a.length;j++){
int first = a[j];
if(first!=sum){
for(int k=0;k<a.length;k++){
int sec = a[k];
if(sec!=first && sec!=sum && (first + sec < sum)){
tmp = new HashSet<Integer>();
tmp.add(first);
tmp.add(sec);
tmp.add(sum);
triangle.add(tmp);
}
}
}
}
}
for(HashSet<Integer> hs : triangle)
System.out.println(hs);
}
【问题讨论】:
-
如果它已经在工作,它可能更适合 CodeReview。一项改进是不从您的方法内部打印到标准输出。返回 HashSet。
-
一般来说这是不好的做法。最明显的原因是您将该方法的使用绑定到 System.out。如果方法中需要输出,最好传入流;它更灵活。不过,这种情况对您来说可能并不重要。
-
如果你不在那里打印它只会更干净一点,因为该方法负责一件事:处理数字。其他人可以负责打印它们。确切地解释原因需要一段时间,但如果您尝试让所有事情都尽可能少做,事情就会变得更好。
-
我有点困惑。如果您有三个数字 A、B、C 和 A + B 不能用这些边组成一个三角形? (P.S. 仅仅将其更改为
>是行不通的。您必须确保 A + B > C 其中 C 是三个中最大的。) -
此外,您的代码似乎希望所有
a[i]都不同。如果其中任何一个相同,您的代码将丢失所有等腰三角形和等边三角形。
标签: java arrays triangle-count