0

j'ai écrit un code pour un "Heads or Tails" jeu ci-dessous et:Javascript Comment concaténer des caractères séparés en une chaîne dans un tableau?

var userInput = prompt("Enter maximum number output: "); 

function coinFlip() { 
    return (Math.floor(Math.random() * 2) === 0) ? 'Heads' ; 'Tails'; 
} 

for (var i = 0; i < 6; i++) 
{ 
    var result = []; 

    result["randomNum"] = (Math.floor(Math.random()*userInput); 

    result["coin"] = (coinFlip()); 
} 

Je suis en train de compter la somme des têtes au total et la somme des queues totales chacun avec le code:

var headsCount = 0; 
var tailsCount = 0; 

for (var j = 0; j < result["coin"].length; j++) 
{ 
    if (result["coin"] == 'Heads') 
     headsCount++; 
    else 
     tailsCount++; 
} 

Le seul problème est qu'il compte chaque caractère de 'Heads' et 'Tails' dans le tableau result["coin"] comme séparé (tel que 'H'-'e'-'a'-'d'-'s') et non dans une chaîne complète (comme "Heads"). Ainsi, au lieu d'incrémenter de 1 chaque fois que la boucle ci-dessus s'exécute, elle augmente de +5.

Je veux qu'il soit incrémenté de +1 seulement.

Comment faire pour que le code lise la chaîne complète stockée dans result["coin"] et non caractère par caractère?

EDITED - a changé le < 2 * 2

+0

Vous avez beaucoup de problèmes. 'var result = []' crée un tableau vide, mais 'result [" coin "] n'ajoute rien au tableau :) Voyez par vous-même dans la console des développeurs Chrome. Ceci est entièrement indépendant du problème, mais c'est quelque chose de fondamental que vous devriez connaître. –

+0

Qu'est-ce que c'est (Math.floor (Math.random() <2) === 0) 'supposé faire? Je pense que vous voulez probablement 'Math.random() <0.5? «Têtes»: «Queues» – jfriend00

+0

Le Math.floor (Math.random() <2 === 0)? «Têtes» "Queues"; est supposé donner un résultat aléatoire 'Heads' ou 'Tails' à chaque fois que la boucle est exécutée. – 5120bee

Répondre

1

var result = []; est à l'intérieur de la boucle, de sorte qu'elle est remplacée par un tableau vide à chaque fois. Donc, quand vous essayez de faire une boucle sur les résultats, il y a un élément dans le résultat; le dernier. Tirez le tableau de résultat hors de la boucle pour pouvoir y ajouter à chaque itération.

Il semble que userInput devrait être le nombre de fois à boucler. Je ne sais pas pourquoi vous le mettez dans result["randomNum"]. result est un tableau, pas un objet, il n'a donc que des clés entières. Au lieu d'ajouter le résultat du tirage au sort à result["coin"], je pense que vous voulez l'ajouter au tableau, donc après l'avoir lancé six fois, cela pourrait ressembler à ceci: ["Heads", "Heads", "Tails", "Heads", "Tails", "Tails"]. Vous pouvez le faire en appelant result.push avec la sortie de tirage au sort.

Pour obtenir l'un des deux résultats de façon aléatoire, comparez la sortie de Math.random() par rapport à 0,5, ce qui est à mi-chemin entre les limites. Les nombres inférieurs à 0,5 peuvent être considérés comme des têtes, tandis que les nombres supérieurs ou égaux à 0,5 peuvent être considérés comme des queues.

Mettre tous ensemble, ce que je pense que vous allez pour:

function coinFlip() { 
 
    return Math.random() < 0.5 ? 'Heads' : 'Tails'; 
 
} 
 

 
var result = []; 
 
var userInput = parseInt(prompt("Enter maximum number output: "), 10); 
 
for (var i = 0; i < userInput; i++) { 
 
    result.push(coinFlip()); 
 
} 
 

 
var headsCount = 0; 
 
var tailsCount = 0; 
 

 
for (var j = 0; j < result.length; j++) { 
 
    if (result[j] == 'Heads') 
 
    headsCount++; 
 
    else 
 
    tailsCount++; 
 
} 
 

 
console.log(headsCount, "heads and", tailsCount, "tails");

Tout cela étant dit, il y a certainement des points à améliorer. Vous n'avez pas besoin de faire une boucle une fois pour construire les résultats, puis bouclez une deuxième fois pour lire les résultats.

Vous pouvez compter le nombre de têtes/queues lorsque les pièces sont retournées. Par exemple:

function isCoinFlipHeads() { 
 
    return Math.random() < 0.5; 
 
} 
 

 
var numFlips = parseInt(prompt("How many flips?"), 10); 
 
var heads = 0; 
 
var tails = 0; 
 
for (var i = 0; i < numFlips; i++) { 
 
    isCoinFlipHeads() ? heads++ : tails++; 
 
} 
 
console.log(heads, "heads and", tails, "tails");

+0

Pour l'entrée user, j'ai voulu saisir l'entrée de l'utilisateur de n'importe quel nombre, générer un nombre aléatoire de 0 au nombre entré, puis l'afficher dans un tableau de résultats. Dans le même temps, je veux simuler un jeu de "Heads or Tails" et afficher ce résultat dans le même tableau de résultats. Voici un lien vers mon code complet: [link] (https://jsfiddle.net/8oyro4zp/) – 5120bee

+1

Eh bien, ce n'était pas tout à fait ce que je voulais, mais votre code a réussi à m'aider à mieux comprendre les choses et j'ai modifié votre deuxième code de fonction un peu pour la partie que je voulais. Merci! – 5120bee