下面的代碼,第二個(gè)if判斷是干嘛的啊,麻煩解讀下public static void main(String[] args) { int [] arr = {23,14,1,22,9}; int size = arr.length - 1; for(int ?i = 0; i < size; i++) { if (arr[i] > arr[i + 1]) { int temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } if (i == size -1) { i = -1; size--; } } System.out.println(Arrays.toString(arr)); }
3 回答
已采納

我是新手_請(qǐng)多指教
TA貢獻(xiàn)140條經(jīng)驗(yàn) 獲得超79個(gè)贊
因?yàn)榈谝徽喤判蛑荒艽_定所有數(shù)字里最大的數(shù),經(jīng)過(guò)前后比較交換完后就只是把23移到最后,那么前面的順序還是14,1,22,9還沒(méi)排好。那第二次排序if(i==size-1)這是判斷第一整輪循環(huán)比較只要等于最后一次比較的時(shí)候,由于要進(jìn)行第二輪排序,此時(shí)i=-1是加1后能正常第二輪循環(huán),那么第二輪最后一個(gè)數(shù)字就不要在參加前面的比較了,因此比較的次數(shù)要減1,size--;第三輪以此類推

qq_青棗工作室_0
TA貢獻(xiàn)446條經(jīng)驗(yàn) 獲得超754個(gè)贊
這個(gè)是冒泡排序。
第二個(gè)if是用來(lái)重新開始的。當(dāng)i到了size-1時(shí),把i=-1,然后循環(huán)繼續(xù)i++,那么i就等于0了(重新開始)。另外,還用了size--,是用來(lái)減少for循環(huán)判斷i<size里的size。
相當(dāng)于下面的正常寫法:
for(int?i=0;i<size;i++){ ????for(int?j=0;j<size-i;j++){ ????????if(arr[j]>arr[j+1]){ ???? int?temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } }
添加回答
舉報(bào)
0/150
提交
取消