Problèmes De Production De Mathématiques.Nombre aléatoire, Soit 0 ou 1
J'ai vu cette question publiée dans un grand nombre de fois sur ce site et croyez-moi, j'ai regardé à travers de si nombreux et de si nombreux des vidéos YouTube, et rien n'a fini de travailler pour moi. Comme le titre le dit je veux un nombre aléatoire, soit 0 ou 1, puis qui sera retourné à la main() dans mon code ci-dessous.
import java.util.Scanner;
public class Exercise8Lab7 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int numFlips = 0;
int heads = 0;
int tails = 0;
String answer;
System.out.print("Please Enter The Number Of Coin Tosses You Want: ");
numFlips = input.nextInt();
for(int x = 1;x <= numFlips; x++){
if(coinToss() == 1){
answer = "Tails";
tails++;
}
else{
answer = "Heads";
heads++;
}
System.out.print("\nCoin Toss " + x + ": " + answer);
}
System.out.println("\n\n====== Overall Results ======" +
"\nPercentage Of Heads: " + (heads/numFlips)*100 + "\nPercentage Of Tails: " + (tails/numFlips)*100);
}
public static int coinToss(){
double rAsFloat = 1 * (2 + Math.random( ) );
int r = (int)rAsFloat;
return r;
}
}
De nombreuses solutions ont été proposé d'utiliser l'util.Option aléatoire qui je l'ai fait et fonctionne parfaitement, mais je veux savoir pourquoi je ne peux pas obtenir que cela fonctionne. Évidemment, je veux que ce nombre est un entier de moi-même si je les convertir en int après le nombre aléatoire a été généré. Mais peu importe ce que je ajouter ou multiplier les Mathématiques.random (), il va toujours être la tête, ou en tous être soit des Queues. Ne sont jamais mélangées.
Toute aide appréciée!
- Ainsi, l'écriture
1 *
aurait dû être un indice que vous ne l'avez pas droit, car en multipliant tout par 1 n'est pas accomplir grand-chose. Random
a un.nextInt()
version prenant une limite supérieure. Sinon, eh bien, juste la génération aléatoire d'int et ne% 2
sur elle.- parce que
Math.random() + 2
génère un nombre aléatoire compris entre 2,0 et 2,9. Rien dans cette gamme sera jamais égal à 1. Si vous êtes uniquement intéressé par 0 ou 1 utilisationMath.round(Math.random())
- Merci à tous ceux qui ont répondu! J'ai juste multiplié les Mathématiques.random() par 2 et maintenant, c'est de me donner aléatoire des réponses pour les Têtes et les Queues. Le problème maintenant est le pourcentage pour les Chefs et le pourcentage de Queues dans la dernière instruction d'impression ne fonctionne pas du tout, ils sont toujours à la fois = 0...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser des valeurs booléennes de 0 ou 1 en fonction de la valeur de
Math.random()
en tant que double entre 0.0 et 1.0 et faire le générateur aléatoire beaucoup plus simple. Et vous pouvez se débarrasser complètement de lacoinToss()
méthode.Supprimer le tirage au sort de la méthode et de remplacer la première conditionnelle avec le code ci-dessus.
Math.random();
par elle-même va retourner une valeur entre 0.0 et moins de 1.0. Si la valeur est dans la moitié inférieure, [0.0, 0.5), puis il a la même probabilité d'être dans la moitié supérieure, [0.5, 1.0). Par conséquent, vous pouvez régler une valeur dans la moitié inférieure comme vrai et le haut comme faux.Essayer cela), Il va générer un nombre 0 ou 1
sa ne fonctionne pas à cause de l'entier de maths que vous utilisez, l'appel à 2+ Mathématiques.Le hasard est à peu près toujours de vous donner une réponse entre 0.0 et 1.0.
donc en supposant que vous recevez 0.25 comme votre résultat de votre calcul est comme suit
Alors que vous vérifiez pour voir si votre résultat == 1 ( ce qui ne le sera jamais. )
Un meilleur résultat serait de déclarer java.util.Aléatoire comme une variable de classe et d'appel aléatoire.nextBoolean() et il vous suffit d'effectuer votre tête/queue de calcul sur que.
Si vous continuez à utiliser les Mathématiques.random() et permet de dire
Vos résultats serais très légèrement de travers à cause du fait que les Mathématiques.random() ne peut pas retourner 1.0, en raison du fait que la spécification de l'API java états:
"Renvoie une valeur de type double avec un signe positif, supérieur ou égal à 0.0 et moins de 1,0."
Math.random()
pouvait revenir qui sont < 0,5 exactement égal au nombre de valeurs possibles qui sont >= 0.5. J'aurais pour l'étude de l'algorithme pour être certaine à 100%, cependant.Math.random()
retourne un hasard flotter dans l'intervalle [0.0,1.0) - ce qui signifie que le résultat peut être n'importe quoi allant de 0 à mais pas y compris 1.0.Votre code
va prendre ce nombre dans [0.0,1.0) gamme; l'ajout de 2 pour qu'il vous donne un nombre dans [2.0,3.0) gamme; en la multipliant par 1 n'a rien d'utile; puis, quand vous tronquer un nombre entier, le résultat est toujours 2.
Pour obtenir des nombres entiers de ce genre de fonction de lecture aléatoire, vous avez besoin de comprendre comment beaucoup de différents nombres entiers vous pouviez retourner, puis multipliez votre nombre aléatoire par qui. Si vous voulez un "0 ou 1" réponse, de votre portée est de 2 différents entiers, multiplier
Math.random()
par 2:Cela vous donne un nombre aléatoire dans l'intervalle [0.0,2.0), qui peut ensuite être 0 ou 1 lorsque vous tronquez pour un entier avec
(int)
. Si, au lieu de cela, vous voulais quelque chose qui renvoie 1 ou 2, par exemple, vous devriez juste ajouter 1:Je pense que vous avez déjà compris que le
Random
classe vous donne ce que vous voulez beaucoup plus facilement. J'ai décidé d'expliquer tout cela de toute façon, parce qu'un jour vous pourriez travailler sur un système d'héritage dans une vieille langue où vous avez vraiment besoin de travailler avec un [0.0,1.0) valeur aléatoire. (OK, c'est peut-être pas trop probable, mais qui sait.)(int)(Math.random()*2) fonctionne aussi très bien dans ce cas
Le problème peut être traduite en booléen génération comme suit :
Bizarre que personne n'est à l'aide d'un modulo de la division pour le nombre aléatoire.
C'est l'implémentation la plus simple, vous pouvez obtenir:
Mathématiques.round(Math.random()) retourne 0.0 et 1.0. Étant donné que ces deux valeurs sont bien dans les limites de l'int gamme, ils peuvent être castée pour int.
utilisation de mod il va vous aider!