ala*_*m37 6 java random java.util.scanner
我已经在这个网站上看到了很多次发布的这个问题,并且相信我已经浏览了很多这么多的YouTube视频而且没有任何东西最终为我工作.正如标题所说,我想要一个随机数,0或1,然后将返回到main(),如下面的代码所示.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
许多解决方案已被建议使用我已经完成并完美运行的util.Random选项,但我想弄清楚为什么我不能让它工作.显然我希望自己的数字是一个int,所以我在生成随机数后将其转换为int.但无论我添加或乘以Math.random(),它总是都是Heads或者都是Tails.永远不要混
任何帮助赞赏!
小智 14
您可以使用0或1的布尔值Math.random()作为0.0和1.0之间的双精度值,并使随机生成器更简单.你可以完全摆脱这种coinToss()方法.
if(Math.random() < 0.5) {
answer = "Tails";
tails++;
}
Run Code Online (Sandbox Code Playgroud)
删除硬币抛出方法并用上面的代码替换第一个条件.
Math.random();单独返回0.0到小于1.0的值.如果该值在下半部分[0.0,0.5],那么它具有处于上半部分的相同概率,[0.5,1.0].因此,您可以将下半部分中的任何值设置为true,将上部设置为false.
小智 7
试试这个)它将生成数字0或1
Math.round( Math.random() ) ;
Run Code Online (Sandbox Code Playgroud)
奇怪的是,没有人对随机数使用模除法。这是您可以获得的最简单的实现:
Random rand = new Random();
int randomValue = rand.nextInt() % 2;
Run Code Online (Sandbox Code Playgroud)
Math.round(Math.random()) 将返回 0.0 和 1.0。由于这两个值都在 int 范围的限制内,因此可以将它们强制转换为 int。
public static int coinToss(){
return (int)Math.round(Math.random());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41166 次 |
| 最近记录: |