我有一個包含以下內容的類:
while (true) {
// if minimum element in the queue is greater than required sweetness
// then we are done
if (queue.peek() >= minSweetness) {
solutionPossible = true;
break;
} else {
// if there are more than or equal to 2 elements,
// then only solution is possible
// because we have already checked queue.peek() for the single element
// present, and that is less than minSweetness
if (queue.size() >= 2) {
// remove minimum and 2nd minimum values
int a1 = queue.poll();
int a2 = queue.poll();
// again push the value to the queue
// after calculating the combined sweetness
queue.offer(a1 2 * a2);
} else {
// for single element that is less than required sweetness
// no solution is possible
solutionPossible = false;
break;
}
// increase total number of operations
operations ;
}
}
這是一個螢屏截圖:

VScode告訴我減少這個回圈中的break和continue陳述句的總數最多使用一個,所以我對我能想到的其他方法沒有經驗,我嘗試使用快速修復并且它沒有作業,任何人都知道如何以不同的方式撰寫這個類......?
我嘗試使用快速修復,但它沒有顯示其他選項......
uj5u.com熱心網友回復:
假設您需要保留回圈的原始結構(即while (true)),那么這是一種降低復雜性的方法(已洗掉注釋):
while (true)
{
if (queue.peek() >= minSweetness || queue.size() < 2) {
solutionPossible = (queue.peek() >= minSweetness);
break;
}
int a1 = queue.poll();
int a2 = queue.poll();
queue.offer(a1 2 * a2);
operations ;
}
兩個回圈“中斷”被壓縮為一個。它們處理的不同之處solutionPossible在于可以根據第一個條件進行設定。
被else洗掉為不必要的。
如果peek是一個昂貴的操作(它可能不是),那么首先將結果分配給變數將是一種優化,因為它被使用了兩次。
uj5u.com熱心網友回復:
與其將其編碼while為無限回圈并從中退出,不如break使用變數來控制回圈繼續或退出。在這種情況下,我選擇了一個boolean:
boolean decided = false;
while ( ! decided ) {
// if a minimum element in the queue is
// greater than the required sweetness
// then we are done
if (queue.peek() >= minSweetness) {
solutionPossible = true;
decided = true;
} else {
// if there are more than or equal to 2 elements,
// then only solution is possible
// because we have already checked
// queue.peek() for the single element
// present, and that is less than minSweetness
if (queue.size() >= 2) {
// remove minimum and 2nd minimum values
int a1 = queue.poll();
int a2 = queue.poll();
// again push the value to the queue
// after calculating the combined sweetness
queue.offer(a1 2 * a2);
} else {
// for a single element that is
// less than the required sweetness
// no solution is possible
solutionPossible = false;
decided = true;
}
// increase the total number of operations
operations ;
}
}
順便說一句,我喜歡保留第一個break. 這是一種風格偏好:
boolean decided = false;
while ( ! decided ) {
// if a minimum element in the queue is
// greater than the required sweetness
// then we are done
if (queue.peek() >= minSweetness) {
solutionPossible = true;
decided = true;
break;
// if there are more than or equal to 2 elements,
// then only solution is possible
// because we have already checked
// queue.peek() for the single element
// present, and that is less than minSweetness
if (queue.size() >= 2) {
...
保留第一個break允許消除第一個else,將后面的代碼的嵌套級別減少一個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/522111.html
