我收到了一些代码,我试图把它放在一个更好的格式通过其冷凝:如何浓缩此代码?
ArrayList<Integer> a = new ArrayList<Integer>();
ArrayList<Integer> c = new ArrayList<Integer>();
for(int i = 0; i < 10; i++) {
int nextInt = rand.nextInt();
while((a.contains(nextInt) ? 1:0) + ((nextInt < 0) ? 1:0) +
((nextInt > 1000) ? 1:0) >= 1){
nextInt = rand.nextInt();
}
a.add(nextInt);
nextInt = rand.nextInt();
while(((c.contains(nextInt))?1:0) + ((nextInt < 0)?1:0) +
((nextInt > 1000)?1:0) >= 1) {
nextInt = rand.nextInt();
}
c.add(nextInt);
}
在while循环有完全相同的代码,但我不知道我是否合并的随机性会丢失它。然而,这种情况对我来说似乎很奇怪,任何人都可以解释它?你会如何压缩这段代码?
“通过凝结使其更好的形式” - 这根本不是一个好方法。 “凝结”的代码通常不会使其更快(只会更难阅读和理解) – Mat 2011-05-01 18:01:13
将它变成一种方法并使用该方法而不是多次写入它? – adorablepuppy 2011-05-01 18:03:14
这段代码应该做什么?用这种奇怪的逻辑(挑选随机数然后根据数值进行切换),将它封装到具有合理名称的方法中很重要。另一件突出的事情是,当你在循环中迭代时,你一直调用'Array#contains',给它一个O(n^2)运行时。但在优化之前,请考虑你想要完成的是什么,因为可能有更好的方法。 – 2011-05-01 18:10:39