第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我不能在循環(huán)中編寫返回語句?

為什么我不能在循環(huán)中編寫返回語句?

慕慕森 2022-07-14 16:43:11
我正在編寫一個函數(shù),它給了我最大的因子,它是一個數(shù)字的質(zhì)數(shù)。例如,數(shù)字 12 會給我 3。我的初始代碼是:public static int getLargestPrime(int number) {        if (number < 2) {            return -1;        }            for (int num = 2; num <= number; num++) {                int mod = number % num;                if (mod == 0) {                    int div = number / num;                    if (div == 1) {                        return number;                    } else {                        number = div;                        num = 1;                    }                }            }    }但是我不斷收到缺少返回語句的錯誤,所以我添加了一個:public static int getLargestPrime(int number) {        if (number < 2) {            return -1;        }            for (int num = 2; num <= number; num++) {                int mod = number % num;                if (mod == 0) {                    int div = number / num;                    if (div == 1) {                        return number;                    } else {                        number = div;                        num = 1;                    }                }            }            return number;    }現(xiàn)在它是正確的,但我不太明白它背后的邏輯。我已經(jīng)讀到在某些情況下循環(huán)不會執(zhí)行,因此即使我的循環(huán)沒有執(zhí)行,我也需要返回一些東西,但是我想不出我的循環(huán)不會執(zhí)行的任何情況。從字面上看,任何 2 或以上的東西都會觸發(fā)循環(huán),而任何小于 2 的東西都將返回 -1。所以我的問題是在什么情況下循環(huán)不會執(zhí)行?而且,for循環(huán)之后的return語句并沒有真正的意義,有沒有更好的方法來解決缺少的return語句?
查看完整描述

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)。


查看完整回答
反對 回復(fù) 2022-07-14
?
陪伴而非守候

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


查看完整回答
反對 回復(fù) 2022-07-14
?
翻翻過去那場雪

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;


}


查看完整回答
反對 回復(fù) 2022-07-14
?
達(dá)令說

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


查看完整回答
反對 回復(fù) 2022-07-14
  • 4 回答
  • 0 關(guān)注
  • 174 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號