重新改寫，修正幾個邏輯錯誤