亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

無法解析符號

無法解析符號

MYYA 2023-09-27 16:49:39
我嘗試了這個,但它說這個錯誤:無法解析符號ipublic Incident getNextIncident() {    if (!incidentQueue.isEmpty()) {        Incident i = incidentQueue.element();        incidentQueue.remove();    }    return i;}
查看完整描述

4 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

解釋

您不能在聲明的范圍之外使用變量。


你i 在里面創建if,所以一旦結束它就會被銷毀if。您必須i 在. if例如:


public Incident getNextIncident() {

    Incident i = null;

    if (!incidentQueue.isEmpty()) {

        i = incidentQueue.element();

        incidentQueue.remove();

    }

    return i;

}

然后你就可以在外面使用它了,如你所見。


處理空箱

但需要注意的是,null如果沒有進入if,則應該處理這種情況:


public Incident getNextIncident() {

    Incident i = null;

    if (!incidentQueue.isEmpty()) {

        i = incidentQueue.element();

        incidentQueue.remove();

    }


    if (i == null) {

        // TODO Handle this case ...

    }


    return i;

}

請注意,您也可以直接從您的內部返回if,無需在外部執行此操作:


public Incident getNextIncident() {

    if (!incidentQueue.isEmpty()) {

        Incident i = incidentQueue.element();

        incidentQueue.remove();

        return i;

    }


    // TODO Handle this case ...

}

或者,以提前返回的方式稍微重寫(首選風格):


public Incident getNextIncident() {

    if (incidentQueue.isEmpty()) {

        // TODO Handle this case ...

    }


    Incident i = incidentQueue.element();

    incidentQueue.remove();

    return i;

}

輪詢

請注意,隊列中用于刪除并返回第一個值的方法有一個常用名稱poll。如果您的隊列恰好是來自 Java 庫的隊列,而不是自定義類,那么它也已經具有這樣的方法。


請參閱Queue#poll的文檔:


檢索并刪除此隊列的頭部,如果此隊列為空,則返回 null。


因此,您可以這樣做,而不是創建這個方法


Incident head = incidentQueue.poll();

// instead of

Incident head = incidentQueue.getNextIncident();

選修的

讓我向您建議一種現代方法來處理由于隊列為空而無法返回值的情況。


老式的方式是 return null,但這有很多缺點。從 Java 8 開始,我們就Optional專門為此創建了它(請參閱其文檔)。


public Optional<Incident> poll() {

    if (incidentQueue.isEmpty()) {

        return Optional.empty();

    }


    Incident head = incidentQueue.element();

    incidentQueue.remove();

    return Optional.of(head);

}

筆記

我還建議將事件變量重命名為incidentorhead而不是i. 不要縮寫變量名稱,除非它們是眾所周知的(例如http)或者是常見模式(例如i, j, kfor 循環或a,b用于數學運算)。i只會在這里令人困惑,因為它通常用作int i循環中的索引變量。


查看完整回答
反對 回復 2023-09-27
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

Queue毫無意義地復制現有功能。您的代碼(如果有效)相當于

public Incident getNextIncident() {
    return incidentQueue.poll();
}


查看完整回答
反對 回復 2023-09-27
?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

i您在條件內聲明if,因此編譯器表示該行中return i;它可能不知道是什么i。


您必須在以下之前聲明它if:


public Incident getNextIncident() {

    Incident i = null;

    if (!incidentQueue.isEmpty()) {

        i = incidentQueue.element();

        incidentQueue.remove();

    }

    return i;

}


查看完整回答
反對 回復 2023-09-27
?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

這應該只是一個小問題。您已在 if 塊內聲明了 Incident 對象。這意味著它只留在那里。當你到達該return i;部分后,它基本上不存在。您必須Incident i在 if 塊外部聲明。



查看完整回答
反對 回復 2023-09-27
  • 4 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號