Latihan 1 - Hint 4
Saat ini program tidak menentukan urutan antara angka dan operator sehingga input seperti berikut akan dianggap valid:
menghasilkan 5
dan
menghasilkan 3
Untuk mencegah hal tersebut kita dapat menambahkan kondisi pada input angka dan operator:
- input angka dapat dilakukan bila operand kiri (
nums[0]) belum ada atau operator sudah ada dan jumlah operand < 2. - input operator dapat dilakukan bila operand kiri sudah ada.
const validOperators = ['+', '-', '/', '*', '=']
let input
let nums = []
let operator = null
let sum = 0
do {
input = prompt()
if(!isNaN(input) && (!nums[0] || operator) && nums.length < 2) { // input angka
nums.push(Number(input))
} else if(validOperators.indexOf(input) >= 0 && nums[0]) { // input operator
if(operator) { // operator telah di-set sebelumnya
// kalkulasi nums menggunakan operator, simpan ke sum
switch(operator) {
case '+':
sum = nums[0] + nums[1]
break
case '-':
sum = nums[0] - nums[1]
break
case '*':
sum = nums[0] * nums[1]
break
case '/':
sum = nums[0] / nums[1]
break
}
// reset nums, dan gunakan sum sebagai operand kiri
nums = [sum]
}
operator = input
} else { // input tidak valid
alert('input tidak valid')
}
} while (input !== '=')
alert(sum)Terakhir mari tambahkan text pada prompt untuk menampilkan angka dan operator yang telah diinput untuk memudahkan user:
const validOperators = ['+', '-', '/', '*', '=']
let input
let nums = []
let operator = null
let sum = 0
do {
const messageArr = []
if(nums.length > 0) {
messageArr.push(String(nums[0]))
if(operator) messageArr.push(operator);
if(nums[1]) messageArr.push(nums[1]);
}
input = prompt(messageArr.join(' '))
if(!isNaN(input) && (!nums[0] || operator) && nums.length < 2) { // input angka
nums.push(Number(input))
} else if(validOperators.indexOf(input) >= 0 && nums[0]) { // input operator
if(operator) { // operator telah di-set sebelumnya
// kalkulasi nums menggunakan operator, simpan ke sum
switch(operator) {
case '+':
sum = nums[0] + nums[1]
break
case '-':
sum = nums[0] - nums[1]
break
case '*':
sum = nums[0] * nums[1]
break
case '/':
sum = nums[0] / nums[1]
break
}
// reset nums, dan gunakan sum sebagai operand kiri
nums = [sum]
}
operator = input
} else { // input tidak valid
alert('input tidak valid')
}
} while (input !== '=')
alert(sum)