Почему я не могу просмотреть обновленный счетчик для переменной с console.log в Javascript? - PullRequest
0 голосов
/ 02 апреля 2020

У меня в настоящее время есть этот код ниже, он должен эмулировать систему подсчета карт, в которой различные символы увеличивают / уменьшают счет при прохождении. Приведенный ниже код выполняется успешно, но когда я пытаюсь выполнить console.log (cc (2,3,4,5,6); он возвращает 1 Bet, когда я знаю, что код выполняет 5 Bet, поскольку эти символы должны увеличивать счет Тем не менее console.log не возвращает точный счет, я полагаю, это связано с областью действия? Но я хотел бы, чтобы кто-нибудь мог объяснить, почему счет не возвращается точно.

var count = 0;

function cc(card) {
  switch(card) {
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
      count += 1;
      break;
    case 7:
    case 8:
    case 9:
      count += 0;
      break;
    case 10:
    case 'J':
    case 'Q':
    case 'K':
    case 'A':
      count -= 1;
      break;
  }

  if (count > 0) {
    return count + " Bet";
  } 
  else {
    return count + " Hold";
  }

}


cc(2,3,4,5,6); \\ returns 5 Bet
console.log(cc(2,3,4,5,6)); \\ returns 2 Bet


Ответы [ 3 ]

0 голосов
/ 02 апреля 2020

У вас две основные проблемы.

Во-первых, ваш счет должен начинаться с нуля каждый раз, когда вы звоните cc(). Поскольку вы объявили count вне функции, ее значения сохраняются между вызовами cc(). Объявляя его внутри функции, он инициализируется нулем, прежде чем он начинает считать значения карты.

(Если вы не хотите продолжать предыдущий подсчет, в этом случае вы должны оставить его объявленным вне функции)

Во-вторых, ваша функция принимает только один аргумент. Вы должны заставить его принять список аргументов. Это можно сделать просто с помощью оператора распространения .... Затем вам нужно провести l oop через каждое значение карты и выполнить подсчет.

function cc(...cards) { // accept a list of card values as arguments.
  let count = 0

  for (const card of cards) { // loop through all card values.
    switch (card) {
      case 2:
      case 3:
      case 4:
      case 5:
      case 6:
        count += 1
        break
      case 7:
      case 8:
      case 9:
        count += 0
        break
      case 10:
      case 'J':
      case 'Q':
      case 'K':
      case 'A':
        count -= 1
        break
    }
  }

  if (count > 0) {
    return `${count} Bet`
  }

  return `${count} Hold`
}

cc(2, 3, 4, 5, 6) // returns 5 Bet
console.log(cc(2, 3, 4, 5, 6)) // returns 5 Bet
console.log(cc(2, 3, 4, 5, 6)) // returns 5 Bet
0 голосов
/ 02 апреля 2020

Используйте arguments или оператор splat для получения всех переданных аргументов, а затем l oop it:

function cc(...cards) {
  var count = 0;
  var card;

  for (var i = 0; i < cards.length; i++) {
    card = cards[i];
    switch (card) {
      case 2:
      case 3:
      case 4:
      case 5:
      case 6:
        count += 1;
        break;
      case 7:
      case 8:
      case 9:
        count += 0;
        break;
      case 10:
      case 'J':
      case 'Q':
      case 'K':
      case 'A':
        count -= 1;
        break;
    }
  }

  if (count > 0) {
    return count + " Bet";
  } else {
    return count + " Hold";
  }
}



cc(2, 3, 4, 5, 6); // returns 5 Bet
console.log(cc(2, 3, 4, 5, 6)); // returns 2 Bet
0 голосов
/ 02 апреля 2020

var count = 0;
const bet = card => {
  switch (card) {
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
      count += 1;
      break;
    case 7:
    case 8:
    case 9:
      count += 0;
      break;
    case 10:
    case "J":
    case "Q":
    case "K":
    case "A":
      count -= 1;
      break;
  }
};
function cc(...moves) {
  moves.forEach(bet);
  if (count > 0) {
    return count + " Bet";
  } else {
    return count + " Hold";
  }
}

console.log(cc(2, 3, 4, 5, 6)); // returns 5 Bet
console.log(cc(2, 3, 4, 5, 6)); // returns 10 Bet
...