我收到了一些代碼,我試圖把它放在一個更好的格式通過其冷凝:如何濃縮此代碼?
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