Pomoc s vysvětlenim kodu javascript – JavaScript, AJAX, jQuery – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pomoc s vysvětlenim kodu javascript – JavaScript, AJAX, jQuery – Fórum – Programujte.comPomoc s vysvětlenim kodu javascript – JavaScript, AJAX, jQuery – Fórum – Programujte.com

 

shockwave0
Newbie
30. 3. 2019   #1
-
0
-

jeden dotaz prosím ohledně kodu.

Mám tento kod: /kde v jaké části se určuje, že se hodnoty karet tedy 1 a -1 budou sčítat , že se to nebude počítat součet karet pořád od nuly.

A proč var count nemůže být uvnitř funkce, hodí to špatný výsledek.

Děkuji


var count=0;          /kod na počítání karet v BJku, nízké karty se počítají za 1 a vysoké karty za -1 function cc(card){

switch(card){ case 2: 

case 3: 

case 4: 

case 5:

count++;

break;

case 10: 

case "J":

case "K":

ase "Q":

case "A":

count--; break;

}   

var holdbet="Hold!";

  if(count>0){holdbet="Bet!"   }  

return count + " "+ holdbet;  

}

c(2); cc(10); cc("K"); cc("Q");  cc("A"); cc("J");  

console.log(cc("K"));
 

Nahlásit jako SPAM
IP: 212.4.155.–
KIIV
~ Moderátor
+43
God of flame
30. 3. 2019   #2
-
0
-

Predstav si proste co ta funkce dela. Pokud das promennou dovnitr, tak prvni, co provede je vytvoreni promenne jeji nastaveni na 0. Zaroven prestane na konci funkce existovat.

Ted mas zaroven i odpoved na prvni otazku, je tam promenna, ktera existuje mimo funkci (je takzvane globalni), a funkce ji meni (takzvany side effect funkce, v programovani je dobre se tomu vyhybat jak jen je to mozne).

Osobne bych vytvoril nejakou tridu, ktera ma counter jako atribut. Muzes pak vytvorit vice instanci a zadna z nich neovlivnuje ty ostatni. Proste si pocitaji to svoje.

Nahlásit jako SPAM
IP: 46.135.36.–
Program vždy dělá to co naprogramujete, ne to co chcete...
shockwave0
Newbie
30. 3. 2019   #3
-
0
-

#2 KIIV
Spíš mi jde o to, že nechápu, proč když je proměnná mimo funkci, tak to spočítá dobře a když uvnitř funkce, tak vypočítá blbost, tohle nechápu, proč tomu tak je. Děkuji

Nahlásit jako SPAM
IP: 212.4.155.–
KIIV
~ Moderátor
+43
God of flame
30. 3. 2019   #4
-
0
-

#3 shockwave
no kdyz je ve funkci, tak jaksi existuje jen kdyz spustis funkci a jeji hodnota zmizi, jakmile skonci funkce. Tj, nic si to nemuze pamatovat.

Kdyz je mimo, tak existuje ikdyz funkce nebezi a tim padem si i pamatuje tu napocitanou hodnotu ze vsech predchozich spusteni funkce.

Nahlásit jako SPAM
IP: 46.135.36.–
Program vždy dělá to co naprogramujete, ne to co chcete...
peter
~ Anonymní uživatel
4007 příspěvků
1. 4. 2019   #5
-
0
-

 kod, ktery mel byt dole zpravy, ale Edge mi ho na tomto forku z nejakeho duvodu dal na zacatek (proto taky chodim treba na https://www.itnetwork.cz/…programovani)

function cc(card){
  var holdbet, count;
  count = 0;
  switch(card)
    {
    case 2: case 3: case 4: case 5: count++; break;
    case 10: case "J": case "K": case "Q": case "A": count--; break;
    // default nic?
    }   
  holdbet = "Hold!";
  if(count>0) {holdbet = "Bet!";}
  return count + " "+ holdbet;  
  }

//count = 0;

shockwave
- pouzivej <? tlacitko editoru pro vlozeni kodu

// kod na počítání karet v BJku, nízké karty se počítají za 1 a vysoké karty za -1 

function cc(card){
  var holdbet;
  switch(card)
    {
    case 2: case 3: case 4: case 5: count++; break;
    case 10: case "J": case "K": case "Q": case "A": count--; break;
    // default nic?
    }   
  holdbet = "Hold!";
  if(count>0) {holdbet = "Bet!";}
  return count + " "+ holdbet;  
  }

var count = 0;
cc(2); cc(10); cc("K"); cc("Q");  cc("A"); cc("J");  
console.log(cc("K")); // tomuto nerozumim

Trochu jsem ti ten kod upravil. Ty case, dokud je nezastavis breakem, tak se chovaji jako
if (card==2 || card==3 || card==4 ...) {count++;}

Pouziti te funkce mas nejak divne. 
Nejdriv je count 0.
cc(2): case 2 count++, count=1, count>1 a vypise se hold --- !!! ono se nic nevypise, protoze return hodnotu nevypisujes (totez skoro vsechny ostatni radky), count + " "+ holdbet
cc(10): case 10: count--, count=0, !(count>1) a vypise se bet
cc(K): case K: count--, count=-1, !(count>1) a vypise se bet
cc(Q): case Q: count--, count=-2, !(count>1) a vypise se bet
cc(A): case A: count--, count=-3, !(count>1) a vypise se bet
cc(J): case J: count--, count=-4, !(count>1) a vypise se bet
console.log(cc("K")) case K: count--, count=-5, !(count>1) a vypise se bet --- !!! vypise se do logu (Firefox - nastroje - nastroje pro vyvojare - konzola (log)

Ok. A proc neni count uvnitr? Netusim. Neznam tu hru a jeji pravidla.
Zalezi na tom, jak to ma fungovat. Ted to funguje tak, ze count je GLOBAL. Pokud pouzijes funkci opakovane, tak na vysledek funkce ma vliv predchozi vysledek. Pokud se to tak chovat nema, staci ti jen vyhodnotit, jestli je karta z jedne sady nebo druhe a v dalsim kroku nezalezi na predchozi karte, pak klidne count muze byt uvnitr.

Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:3838:5a25:f2e0...–
peter
~ Anonymní uživatel
4007 příspěvků
1. 4. 2019   #6
-
0
-

 Prislo by mi logictejsi udelat tam 2 funkce. Jednu pro vypocet (cc) a druhou pro vyhodnoceni/vypis (vv);

// kod na počítání karet v BJku, nízké karty se počítají za 1 a vysoké karty za -1 
function vv(count)
  {
  if(count>0) {return "Bet!";}
  return "Hold!"
  }

function cc(card){
  switch(card)
    {
    case 2: case 3: case 4: case 5: return 1; break;
    case 10: case "J": case "K": case "Q": case "A": return -1; break;
    default: return 0; break
    }   
  }

var count = 0;
count += cc(2); vv(count); //document.write(vv(count));
count += cc(10); vv(count);
count += cc("K"); vv(count);
count += cc("Q"); vv(count);
count += cc("A"); vv(count);
count += cc("J"); vv(count);
count += cc("K"); console.log(vv(count));
Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:3838:5a25:f2e0...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

Pomoc s vysvětlením kodu — založil shockwave

Pomoc s vysvětlením kodu — založil shockwave

Pomoc s vysvětlením kodu — založil robbie

Pomoc s přepsáním kódu — založil Jakub

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý