編碼也快樂:兩水壺的故事之JS程式

碧青發表於2013-04-10

看了其他幾位的程式碼, 深感慚愧, 解題部分完全是靠大腦做的, 僅當娛樂吧

我的JavaScript程式碼:

// 水壺類
function Bottle(objParam){
    this.name = objParam.name || '我是無名的水壺..';
    // 初始化水壺容量, 單位為公升(L)
    if(objParam.volume){
        this.volume = objParam.volume;
    } else {
        alert('世界上不存在沒有容量的瓶子!');
        return null;
    }
    // 初始化水壺為空
    this.currentWater = 0;
}

// 將該水壺填滿水
Bottle.prototype.fillWater = function(){
    this.currentWater = this.volume;
};
// 將該水壺清空
Bottle.prototype.empty = function(){
    this.currentWater = 0;
};
// 把該水壺的水倒入其他水壺, 倒滿則止
Bottle.prototype.poureToOtherBottle = function(otherBottle){
    var leftVolume = otherBottle.volume - otherBottle.currentWater;    // 對方水壺剩餘容積
    if(leftVolume >= this.currentWater){
        // 如果對方水壺的剩餘容積比該水壺現有的水還大, 則該水壺被倒空
        otherBottle.currentWater += this.currentWater;
        this.currentWater = 0;
    } else {
        // 否則填滿對方水壺, 該水壺還有剩餘的水
        this.currentWater -= leftVolume;
        otherBottle.currentWater = otherBottle.volume;
    }
};

// 解題部分
(function(){
    var bottle_5 = new Bottle({
            name : '5壺',
            volume : 5
        }),
        bottle_6 = new Bottle({
            name : '6壺',
            volume : 6
        });


    bottle_5.fillWater();

    bottle_5.poureToOtherBottle(bottle_6);    // 將5壺倒入6壺, 此時6壺剩5升, 5壺為空

    bottle_5.fillWater();                    // 再將5壺填滿

    bottle_5.poureToOtherBottle(bottle_6);    // 將5壺倒入6壺, 此時6壺剩6升, 5壺剩4升

    bottle_6.empty();                        // 將6壺清空

    bottle_5.poureToOtherBottle(bottle_6);    // 將5壺倒入6壺, 此時6壺剩4升, 5壺為空

    bottle_5.fillWater();                    // 再將5壺填滿

    bottle_5.poureToOtherBottle(bottle_6);    // 將5壺倒入6壺, 此時6壺剩6升, 5壺剩3升

    alert("5升水壺還剩 " + bottle_5.currentWater + " 升水!");
})(); 

相關文章