4 回答

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個贊
在您的初始代碼中:
if (div == 1) {
return number;
} else {
number = div;
num = 1;
}
}
萬一你總是有錯誤,你將永遠(yuǎn)不會達(dá)到返回語句。編譯器不預(yù)測它是否真的會發(fā)生,因此它需要在 if 和 else 塊中都使用 return 語句。所以它實(shí)際上與for循環(huán)無關(guān)。

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個贊
我想不出我的循環(huán)不會執(zhí)行的任何情況
必須以有效的、明確定義的方式編寫方法。將其視為幫助編譯器的一種形式。
return在編譯時檢查語句是否存在。如果編譯器發(fā)現(xiàn)一個可能的執(zhí)行分支沒有以有效的返回語句(或顯式拋出的異常)結(jié)束,它會遇到錯誤。閱讀更多。
甚至 ...
int method() {
if (true)
return 1;
}
...將無法編譯
This method must return a result of type int

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個贊
兩個建議 1. 最好不要更改您傳遞的參數(shù)(在這種情況下為 number 變量) 2. 盡可能少的 return 語句。
在您的情況下,您可以在 for-lopp 之外聲明另一個變量 tempNumber 并分配“數(shù)字”。在您返回的 if 條件下,您“中斷”。返回函數(shù)末尾的數(shù)字。這樣總是返回?cái)?shù)字
public static int getLargestPrime(int number) {
if (number < 2) {
return -1;
}
int tempNumber = number;
for (int num = 2; num <= tempNumber; num++) {
int mod = tempNumber % num;
if (mod == 0) {
int div = tempNumber / num;
if (div == 1) {
break;
} else {
tempNumber = div;
num = 1;
}
}
}
return tempNumber;
}

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個贊
https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.14
Java 編譯器不會在循環(huán)中驗(yàn)證您的代碼,因此您需要將 return 語句放在所有 fork 中。覆蓋測試會警告你,因?yàn)槟阌幸粋€無法訪問的代碼,所以你需要重新規(guī)劃你的代碼。
注意:您需要檢查您的主要測試直到或等于Math.sqrt(number)
,如果大于此 sqrt 而沒有分隔符,您可以打破循環(huán)并返回number
添加回答
舉報