Это Кодекс войны ката: Vending MachineТорговый автомат не возвращает изменения
Здесь я пытаюсь моделировать автомат. До сих пор я могу вернуть монеты, если вложенных кредитов недостаточно, и я могу заставить машину рассказать мне, сколько изменений необходимо, но я не могу заставить его вернуть изменения.
Изменение должно быть возвращено как объект в зависимости от монеты, которыми располагает торговый автомат.
//if this.coins = {1:1, 2:0, 4:3, 6:2}
//and the change needed is 8
//the change should be changeObj = {1: 1, 6: 1}
//the machine is sneaky and can return less than the required amount, but not more.
Здесь цикл для вычисления изменения и возврата объекта изменения работает должным образом.
let vmCoins = {1:1, 2:0, 4:3, 6:2}
let changeObj = {}
let changeNeeded = 8
for (let d=changeNeeded; d>0; d--){
\t while (vmCoins[d]>0 && (changeNeeded-d)>=0){
\t changeObj[d] ? changeObj[d] ++ : changeObj[d] = 1
vmCoins[d] --
changeNeeded -= d
}
}
console.log(changeObj)
Но когда я положил его в основной раствор, кажется, не цикл для запуска.
function VendingMachine(coins){
this.coins = coins
}
VendingMachine.prototype.vending = function(price,credit){
//Calculate total value of coins inserted
var changeObj = {}
let totalCredit =[]
let arrKeys = Object.keys(credit).map(x=>parseInt(x))
let arrValues = Object.values(credit)
for (var i=0; i<arrKeys.length; i++){
\t totalCredit.push(arrKeys[i]*arrValues[i])
}
totalCredit = totalCredit.reduce((a,b) => a+b)
//if coins inserted less than price, return the inserted coins
if (totalCredit<price){
\t return credit
}
//if coins inserted more than item price, put coins into vending machine & return change.
if (totalCredit>price){
\t arrKeys.forEach(x => this.coins[x] += credit[x])// put coins in vending machine
\t changeNeeded = totalCredit - price
// PROBLEM BEGINS HERE
for(let d=changeNeeded; d<0; d--){
\t while(this.coins[d]>0 && (changeNeeded - d)>=0){
\t changeObj[d] ? changeObj[d] ++ : changeObj[d] = 1
this.coins[d]--
changeNeeded -=d
}
}
return changeObj //does not return as expected
}
}
let vm = new VendingMachine({1:1, 2:0, 4:3, 6:2})
let result = vm.vending(12, {2:1, 6:3})
console.log(vm) //check if the credit is put into the machine (yes)
console.log(result)// returns empty object
Как получить программу, чтобы вернуть объект изменения?
В рабочей версии у вас есть 'd> 0', но вы изменили ее на' d <0' в нерабочей версии. Это было намеренно? – Barmar
* вздох * была ошибка. Работает сейчас ... –