Saat ini program tidak menentukan urutan antara angka dan operator sehingga input seperti berikut akan dianggap valid:

1+
22
33
4=

menghasilkan 5

dan

14
21
3-
4=

menghasilkan 3

Untuk mencegah hal tersebut kita dapat menambahkan kondisi pada input angka dan operator:

  1. input angka dapat dilakukan bila operand kiri (nums[0]) belum ada atau operator sudah ada dan jumlah operand < 2.
  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)

Latihan | Home