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

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

java for循環的時候增加循環體的長度是不是不太好的?

java for循環的時候增加循環體的長度是不是不太好的?

白豬掌柜的 2019-03-01 10:53:43
for(CityDataVO cityItem: citys){ boolean flag =false; for(ProvinceDataVO proItem : list){ xxxxxx flag = true; break; } if(!flag){ ProvinceDataVO province = new ProvinceDataVO(); province.setProvinceId(cityItem.getProvinceId()); province.setProvinceName(cityItem.getProvinceName()); province.setReportNum(cityItem.getCount()); List<CityDataVO> vo = new ArrayList<>(); vo.add(cityItem); province.setCityData(vo); list.add(province); } } 比如上面的代碼,如果我沒有進入第二層的for循環里,我就會對list進行一個add的操作。這里應該是沒有問題的,因為我在第一個for循環體里操作的是第二個for循環的size()。我記得有一個情景是for(){...}我直接在...操作了for的size(),這樣好像是不行的,當初好像有一個什么辦法的,我暫時想不到了,哪位大神幫我回憶回憶呵??
查看完整描述

7 回答

?
九州編程

TA貢獻1785條經驗 獲得超4個贊

不要用 for(:){},用 for(int i = 0; i < list.size(); i++),小心不要搞成死循環

查看完整回答
反對 回復 2019-03-01
?
慕蓋茨4494581

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

不能在foreach里操作list(add,remove等操作)

查看完整回答
反對 回復 2019-03-01
?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

希望直接跳出兩層循環,無非是兩種辦法:

  1. break label的語法(這個我從沒用過,可以Google一下);

  2. 就是你用的辦法,設個標志位。

另外,city的復數是cities而不是citys。

查看完整回答
反對 回復 2019-03-01
?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

這寫得啰嗦了。我的話先這樣寫:

for (CityDataVO cityItem: citys){

    if (validateCityItem(cityItem, list)) {
        continue;
    }

    List<CityDataVO> vo = new ArrayList<>();
    vo.add(cityItem);

    ProvinceDataVO province = new ProvinceDataVO();
    province.setProvinceId(cityItem.getProvinceId());
    province.setProvinceName(cityItem.getProvinceName());
    province.setReportNum(cityItem.getCount());    
    province.setCityData(vo);
    
    list.add(province);
}

...

private boolean validateCityItem(CityDataVO cityItem, List<ProvinceDataVO> list) {
    for(ProvinceDataVO proItem : list){
        if (...) {
            return true;
        }
    }
    
    return false;
}

你的原代碼有幾個需要優化的地方:

  1. 盡量避免雙重循環,內循環一般都應該提取出來;

  2. 對同一個變量的操作,代碼行盡可能集中在一起,這樣閱讀起來更自然;

  3. 變量命名應當表現其業務含義和主要類型,比如 List 對象盡量都用 xxxList 方式命名。這我懶得給你改了。

查看完整回答
反對 回復 2019-03-01
?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

不明白你到底問什么..是if進不去嗎?

查看完整回答
反對 回復 2019-03-01
?
回首憶惘然

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

提問前先組織好自己的思路,你想問的是什么?你希望得到什么回答?不然其他人幫不了你回答。

查看完整回答
反對 回復 2019-03-01
  • 7 回答
  • 0 關注
  • 1054 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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