массив.включает проблему

1

Поэтому моя проблема заключается в том, что метод getNumString() работает некорректно, потому что цикл while работает бесконечно, но я не могу понять, почему. Предполагается, что колода заполнена примерами строк, которые вы видите внутри этого, но никогда не вызывает ни одного из них, кроме первого, когда цикл while не проходит бесконечно (с некоторыми изменениями в коде, конечно). Любое понимание было бы весьма благодарным.

let deck = [
    //"cardR01C01", "cardR01C01",
  ];

function getNumString(num) {
  if (num < 10) {
    return "0" + num.toString();
  }
  else {
    return num.toString();
  }
}

function getRandomNum(upperLimit) {
  return Math.floor((Math.random() * upperLimit) + 1);
}

function fillDeck() {
  let cardString = ".cardR" + getNumString(getRandomNum(4)) + "C" +
    getNumString(getNumString(13));
  while (deck.includes(cardString)) {
    cardString = ".cardR" + getNumString(getRandomNum(4)) + "C" +
      getNumString(getNumString(13));
  }
  deck.push(cardString);
  deck.push(cardString);
}

for (let i = 0; i < (numCards / 2); i++) {
  fillDeck();
}

* После немного большего количества тестов я обнаружил, что истинная проблема заключается в функции.includes. Может ли кто-нибудь сказать мне, почему?

  • 0
    .toString() не требуется для "0" + num.toString(); потому что num «добавляется» в строку, что в любом случае приводит к преобразованию num в строку.
  • 0
    Вы знаете, что deck пуста, потому что строки закомментированы, верно?
Показать ещё 1 комментарий
Теги:

1 ответ

0

Вы getRandomNum(13) виду использовать getRandomNum(13) вместо getNumString(13) в вашем коде? Ваш код может генерировать только 4 уникальные строки :. .cardR01C13,.cardR02C13,.cardR03C13,.cardR03C13. Если numCards достаточно велика, то после создания нескольких карт все эти случаи будут закрыты, но ваш цикл while будет пытаться генерировать карты, пока эта карта уже находится внутри колоды (т.е. Она пытается создавать уникальные карты), Тем не менее, нет способа создать более уникальные карты, и, таким образом, цикл будет продолжаться вечно.

  • 0
    Да. Спасибо! Это работает сейчас!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню