JavaScript de bază: Numărarea cărților – Funcția de numărare a cărților cu șiruri de caractere (Programare, Javascript, Condițional)

E S a intrebat.

Funcția de numărare a cărților a fost explicată de mai multe ori și o înțeleg. Pentru cei care nu o cunosc: funcția mea primește un parametru card, care poate fi un număr sau un șir de caractere. Apoi, eu măresc sau descreștem variabila globală count în funcție de valoarea cărții 2,3,4,5,6 măresc, 7,8,9 o mențin la 0, în timp ce 10, J, Q, K, A o descrește. Funcția mea returnează apoi un șir de caractere cu numărul curent și șirul „Bet” dacă numărul este pozitiv, sau „Hold” dacă este negativ.

Așadar, am înțeles cum se face funcția, iar FreeCodeCamp a acceptat soluția mea deoarece, din punct de vedere tehnic, îndeplinește condițiile lor. Dar am o întrebare cu privire la această funcție:

După cum văd, prima condiție este destul de simplă și ușor de definit, la fel și else if. În al treilea caz, sunt implicate atât numere cât și șiruri de caractere. Asta nu înseamnă că atunci când pun orice șir de caractere în cc, acesta va descrește? Deoarece orice lucru care nu este cuprins între 2 și 6, sau 7 și 9, va decrea automat? Chiar dacă utilizatorul introduce ceva care nu este o carte sau nu este o valoare din listă?

Înțeleg că există o listă de valori și nume de cărți predefinite, dar, cu toate acestea, există o modalitate mai bună de a-mi condiționa declarația pentru a mă asigura că condiția mea se va executa NUMAI DACĂ cartea este 10, J, Q, K sau A, și nu orice altă valoare?

Comentarii

  • Ați putea să schimbați else în else-if și să verificați dacă este vorba de 10, J, Q, K, K sau A, iar apoi, în else, să reveniți imediat sau să afișați un fel de mesaj de eroare pentru a avertiza utilizatorul că ceea ce a introdus nu este un card valid. Adăugarea unui răspuns mai jos. –  > Por Ryan Wilson.
7 răspunsuri
Ryan Wilson

Puteți schimba else-ul dvs. curent, pentru a returna un mesaj de eroare sau doar pentru a reveni imediat în cazul în care intrarea este o carte nevalabilă și adăugați un alt else-if pentru a verifica pentru 10 până la Ace:

if (card >= 2 && card <= 6) {
    count++;
  } else if (card>=7 && card <=9) {
    count+= 0;
  } else if (card === 10 || card === 'J' || card === 'Q' || card === 'K' || card === 'A'){
    count--;
  }else {
    //Either just return or alert an error message and return
  }

Stuti Rastogi

Există mai multe moduri în care ați putea rezolva această situație. Inițial, ați putea să analizați datele de intrare și să atribuiți „J” la 11, „Q” la 12, „K” la 13 și „A” la 1 (dacă trebuie să faceți o distincție), sau doar un număr comun pentru această categorie. Orice altceva este o intrare invalidă și se returnează imediat/se afișează un mesaj de eroare. Ceva de genul:

var count = 0;

function cc(card) {

  if (card == 'J' || card == 'Q' || card == 'K' || card == 'A')
     card = 11;

  if (card >= 2 && card <= 6) {
    count++;
  } else if (card>=7 && card <=9) {
    count+= 0;
  } else if (card >= 10 && card <= 11) {
    count--;               // to keep structure cleaner we use dummy 11 value
  } else
    //error message

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


cc(2); cc(3); cc(7); cc('K'); cc('A');

De asemenea, trebuie să vă asigurați că gestionați valorile minuscule și majuscule pentru cărțile cu imagini.

zero298

Definiți un set de valori permise și verificați dacă valoarea care vă este dată se încadrează în acel set folosind .includes(). De exemplu:

Rețineți că acest lucru este sensibil la tipul de date.

Scott Sauyet

O altă posibilitate este ceva de genul celor de mai jos, care enumeră în mod explicit modificările pentru fiecare carte:

Pentru o listă atât de scurtă precum treisprezece valori, cred că acest tip de listă explicită este mai curat.

De asemenea, acest lucru încapsulează count variabilă într-o închidere. Mi se pare mai curat decât o variabilă globală.

În cazul în care comentariul vorbește despre jokeri, este posibil să doriți o gestionare mai robustă a erorilor:

if (!(card in values)) {throw 'Bad card'}
const change = values[card]

robhirstio

Ați putea folosi o expresie regulată în partea de sus a funcției pentru a sări peste toate condiționalitățile și a returna un mesaj util dacă argumentul transmis nu se potrivește cu o carte validă:

// Check if card is valid
var cardRegex = /^(10|[2-9AJQK])$/i;
if (!cardRegex.test(card)) { 
    return "Invalid Card";
}

Deci, în contextul codului tău, ar arăta astfel:

Valentin

Soluția mea pentru Basic JavaScript: Numărarea cărților

function cc(card) {
// Only change code below this line
if(card >= 2 && card <= 6) {
 count++;
} else if (card === 10 ||card === 'J' || card === 'Q' || card === 'K' || card === 'A') {
 count = count - 1;
}

if (count > 0) {
 return count + ' Bet';
}
return count + ' Hold';
// Only change code above this line
}

DanDanDanWill

Soluția mea, bazată pe ceea ce am învățat până acum. poate că nu este cea mai bună, dar funcționează și ea.

var count = 0;

function cc(card) {
  // Only change code below this line
switch(card){
  case 2:
  case 3:
  case 4:
  case 5:
  case 6:
    count++;
    break
  case 7:
  case 8:
  case 9:
    count = count;
    break
  case 10:
  case 'J':
  case 'Q':
  case 'K':
  case 'A':
    count--;
    break;
}
   if (count <=0) {
    return count + ' Hold';
  }
  else {
    return count + ' Bet'
  }
  // Only change code above this line
}

console.log(cc(2)); 
console.log(cc(3)); 
console.log(cc(7)); 
console.log(cc('K'));
console.log(cc('A'));