gohellp
@gohellp
Громкое "Ы" из темноты

Откуда оно берёт новый элемент массива и куда оно девает значения?

Решил сделать задание друга, на удобном для себя языке и чтоб лишний раз не вызывать опрос с консоли решился делать это через дискорд.
Задание было таким:
Ввести n целых чисел(>0 или <0). Найти разницу чисел. Результат вывести на экран.


Я написал код для этого:
const Discord = require('discord.js');
const bot = new Discord.Client();
const {token1} = require('./conf.json');
var mas =[]
var prom =[]
let a
let i=1

bot.on("message", msg => {
    msg.content = msg.content.toLowerCase().split(" ")
    switch (msg.content[0]) {
        case"!add":
            if (!msg.author.bot){
                if (!msg.content[2]) {
                    msg.reply("Введите, хотя бы 2 значения!")
                } else {
                    mas=[]
                    for (let i = 1; msg.content[i]; i++) {
                        mas.push(Number(msg.content[i]))
                    }
                    msg.reply("Готово. Можете вводить !math")
                    a = mas.length + 1
                }
            }
        break;
        case"!math":
            try{
                prom = []
                mas.push(0)
                while(i<mas.length){
                    mas[a] = mas[i-1] - mas[i];
                    prom.push(mas[a])
                    i++
                }
                console.log(mas)
                console.log(prom)
                msg.reply("Результат: " + mas[a-1] + "\nПромежуточные результаты: " + prom)
                mas = []
            }catch (e) {
                msg.reply("Сначала введите значения!!!")
            }
        break;
    }
})

bot.login(token1);


Но вместо нормальной работы оно решает проявить себя:
zuwem2R.png
PvTRIvg.png

1)Оно не записало промежуточный результат в prom
2)Оно откуда-то взяло ещё один элемент массива и отказалось считать
3)Оно просто отказалось считать

Я хочу понять по какому принципу возникает этот дополнительный элемент и вообще насколько чисто выполнена эта задача.
Заранее благодарен!
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
@StiflerProger
bot.on("message", msg => {

  let [type, ...data] = msg.content.toLowerCase().split(" ");

  if (msg.author.bot) return; // игнорируем бота

  switch (type) {
    case "!add":
      if (data.length < 2) return msg.reply("Введите, хотя бы 2 значения!");

      if (data.find(e => isNaN(e) || Number(e) === 0 || Math.floor(e) !== Number(e))) {
        return msg.reply("Числа должны быть целыми в диапазоне (-∞, 0), (0, ∞)");
      }

      msg.reply("Результат: " + data.slice(1).reduce((acc, cur, index) => acc - cur, data[0]));
      break;

    default:
      msg.reply("Чтобы вычислить разницу чисел. Вызовите команду !add <числа через пробел>");
      break;
  }

})


Для поставленной задачи код у тебя слишком запутанный. Не нужно сохранять нигде промежуточные результаты, и не нужно просить юзера вводить !math

Конечно какой функционал писать дело твоё) но я решил не усложнять
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы