iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0
Software Development

練習java30天系列 第 16

Day17練習java-二元搜尋法debug

  • 分享至 

  • xImage
  •  

今天來講講這個卡了我一天半的問題,其實這個問題的發生真的是出乎我的意料之外,因為我的二元搜尋法的內容是完全正確的這也就導致這個錯誤很難被發現,因為這是我第一次寫二元搜尋法,而問題的本身竟然不是出在演算法身上,害我花了好多的時間專注在演算法除錯中,但是我的方法並沒有錯,因此走入一個死循環當中久久不能自拔。
一直做debug發現最終都會跳出迴圈外這讓我很困惑直到看見這個

https://ithelp.ithome.com.tw/upload/images/20201002/20130684XE6GnOJKPc.png

仔細看會發現一件很奇怪的事我要找的數75在排序好的陣列中索引值是7,也就是說當mid = 7的時候代表已經找到了,但是看右邊的表會發現mid的確是7但是程式確跑到下面要判斷是比mid大還是小的地方,看到的時候真的挺傻眼的,因為這代表實際上索引值是7的數並不是75,於是我去檢查陣列裡的內容真的令人驚訝!!

https://ithelp.ithome.com.tw/upload/images/20201002/20130684VkMRp9RhbS.png

發現了嗎實際上的陣列內容是由大到小,但是我印出的結果卻是從小的大????
https://ithelp.ithome.com.tw/upload/images/20201002/20130684s9pslUyWT7.png
這就是最大的問題,我做氣泡排序法時換完的陣列是由大到小,但是我印出來的結果卻是由小而大,錯中之錯啊,輸出的結果卻恰好看上去是正確的,因此完全找不到問題啊

https://ithelp.ithome.com.tw/upload/images/20201002/201306841GWTdjSlJe.png

要改成這樣才是正確的,其實為了避免會在發生這種錯,其實可以直接用Arrays.toString()
這個語法就不會有問題,下方是完整程式碼

https://ithelp.ithome.com.tw/upload/images/20201002/20130684XMq7LnyHHL.pnghttps://ithelp.ithome.com.tw/upload/images/20201002/20130684TZ0HryuBjD.png

兩種結果
https://ithelp.ithome.com.tw/upload/images/20201002/20130684JnWnCEvzvk.pnghttps://ithelp.ithome.com.tw/upload/images/20201002/201306848Ip4lbFeQM.png


上一篇
Day16練習java-二元搜尋法(已完工)
下一篇
Day18練習java-遞迴
系列文
練習java30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言