for迴圈雙重迴圈 之坑

2021-09-05 01:15:22 字數 3820 閱讀 7249

public class testbackpressure  else }}

for (int i = 0; i < week.size(); i++)

}}

這段**要達到的目的就是將存在相同元素的model 更改狀態為選中 同時跳出避免多次迴圈 不相同的為不選中 

開始我以為這樣是沒問題的但是 事實證明 打臉了。。

只改變最後乙個list 中最後乙個與week 存在相同元素model的值 

wtf -> 因為外部迴圈只迴圈list.size 內部迴圈week.size 問題來了 看輸出結果

testbackpressure.main->list->i->0->week->j->0->ischeck->true

testbackpressure.main->list->i->1->week->j->0->ischeck->false

testbackpressure.main->list->i->1->week->j->1->ischeck->false

testbackpressure.main->list->i->1->week->j->2->ischeck->true

testbackpressure.main->list->i->2->week->j->0->ischeck->false

testbackpressure.main->list->i->2->week->j->1->ischeck->false

testbackpressure.main->list->i->2->week->j->2->ischeck->false

testbackpressure.main->list->i->2->week->j->3->ischeck->false

testbackpressure.main->list->i->2->week->j->4->ischeck->true

testbackpressure.mainfalse

testbackpressure.mainfalse

testbackpressure.mainfalse

testbackpressure.mainfalse

testbackpressure.maintrue

testbackpressure.mainfalse

testbackpressure.mainfalse

直關的看 list i=0 week j=0 變成了true 當list i=1 week j=0 時 又復寫成了false 這是因為week 多次迴圈導致

week 會迴圈多次 與list中的某一項進行比較 所以值會複寫多次並只變換list中最後項滿足條件的資料

當list  i=0   week j=0  此時list.get(0)  與week.get(0).getweeknum() 是相同的 執行if week1.setcheck(true); break 第乙個資料選中

第乙個看似沒問題  好我們來看第二次

當list  i=1  此時內層迴圈重新開始 week j=0  此時list.get(1) 與week.get(0).getweeknum() 是不同的 執行else week1.setcheck(false); 繼續迴圈  外層i 不變內層 i=1 值比較依然不同  執行else week2.setcheck(false).......

注意  看外層迴圈第二次 內層迴圈第二次的情況下 內層要改變的資料依然會重新迴圈 資料自然覆蓋掉i=0時的值

重新賦值為i=1時候week 中model的值 一直到最後i=2 又會覆蓋掉i=1 時 week 中model 的值 此時只保留最後 i=3 時week中model的值---->只保留最後一次 下面是輸出結果 可以看到只有第五項是改了的 第一項和第三項是false

那我們怎麼避免上面的問題呢

改變哪個資料集合中的值 就讓哪個再外層迴圈 滿足條件後break 跳出接著執行下一次迴圈

比如上面我們要改變的時week 中的值 那 外層迴圈 week.size  內層迴圈list.size  這樣迴圈邏輯就變了

這樣week 只迴圈一次 list迴圈多次week.get(i) 隨著i的值增加去 與list 中所有的資料進行比較當條件滿足i+1 接著去和list中的資料比較 避免重複更改 week中的資料 這樣就可以了。。。。雖然很簡單 還是記一下

for (int i = 0; i < week.size(); i++)  else 

}}

輸出結果可以看到要改的 第一三五項均已更改 觀察i 與j的值 可以知道迴圈比較過程

testbackpressure.main->week->i->0->list->j->0->ischeck->true

testbackpressure.main->week->i->1->list->j->0->ischeck->false

testbackpressure.main->week->i->1->list->j->1->ischeck->false

testbackpressure.main->week->i->1->list->j->2->ischeck->false

testbackpressure.main->week->i->2->list->j->0->ischeck->false

testbackpressure.main->week->i->2->list->j->1->ischeck->true

testbackpressure.main->week->i->3->list->j->0->ischeck->false

testbackpressure.main->week->i->3->list->j->1->ischeck->false

testbackpressure.main->week->i->3->list->j->2->ischeck->false

testbackpressure.main->week->i->4->list->j->0->ischeck->false

testbackpressure.main->week->i->4->list->j->1->ischeck->false

testbackpressure.main->week->i->4->list->j->2->ischeck->true

testbackpressure.main->week->i->5->list->j->0->ischeck->false

testbackpressure.main->week->i->5->list->j->1->ischeck->false

testbackpressure.main->week->i->5->list->j->2->ischeck->false

testbackpressure.main->week->i->6->list->j->0->ischeck->false

testbackpressure.main->week->i->6->list->j->1->ischeck->false

testbackpressure.main->week->i->6->list->j->2->ischeck->false

testbackpressure.maintrue

testbackpressure.mainfalse

testbackpressure.maintrue

testbackpressure.mainfalse

testbackpressure.maintrue

testbackpressure.mainfalse

testbackpressure.mainfalse

雙重for迴圈

雙重for迴圈就是在乙個for迴圈裡在巢狀另乙個for迴圈,ji 即兩個迴圈巢狀,還有多重迴圈巢狀的情況,但用的比較少,一般常用的是兩個迴圈巢狀,很少使用多重迴圈,因為for迴圈多了會導致 執行的效率低,而且容易宕機,多迴圈中的總迴圈次數是相乘的,巢狀幾次後幾何級數增長,因此通常情況下在迴圈多次巢狀...

雙重for迴圈

雙重for迴圈 1 概述 很多情況下,單層for迴圈並不能滿足我們的需求,比如我們要列印乙個5行5列的圖形,列印乙個倒直角三角形等,此時就可以通過迴圈巢狀來實現 迴圈巢狀是指在乙個迴圈語句中再定義乙個迴圈語句的語法結構,例如在for迴圈語句中,可以再巢狀乙個for迴圈,這樣的for迴圈語句我們稱之為...

迴圈語句及雙重迴圈

複習 1!2!3!9!10!sum public class test system.out.println sum 雙重迴圈,即乙個迴圈內嵌著另外乙個迴圈,外面的迴圈每跑一遍,內迴圈均要全部跑完。練習1 利用雙迴圈列印倒三角 public class test1 system.out.printl...