gpt4 book ai didi

java - Java中的投币模拟/游戏

转载 作者:搜寻专家 更新时间:2023-11-01 02:41:14 24 4
gpt4 key购买 nike

我目前正在上一门计算机科学类(class),从技术上讲,这门类(class)是为初学者开设的,但我觉得他们给我的所有作业都比我能处理的要复杂。

这项作业要求我进行抛硬币模拟。三个人玩这个游戏,每个人都有特定的获胜条件:

  • 如果有 2 个结果正面和 throw 总数,则获胜是均匀的
  • 如果有 2 个结果反面且 throw 总数为偶数,则获胜
  • 如果有 2 个结果是反面或正面,并且 throw 的总数是奇数,则获胜

我应该做的是运行一个实验 300 次。每次我都应该确定这三个人中谁赢了,赢了多少次。我真的被困住了。我几乎没有任何代码,但我对代码应该是什么样子有一个非常基本的想法,但我不能将它放入 Java 语言中。

对于我的作业,我需要显示导致某人获胜的二进制序列。

我的想法:

  1. 为每个人初始化一个计数器(1、2、3),这样我就可以跟踪他们赢了多少次
  2. 初始化头部计数和尾部计数以跟踪随机生成的序列
  3. 几乎对整个实验使用 for 循环。应该有一个定义实验应该运行 300 次的外循环,内循环应该包含检查谁赢了的 if 语句。每个 if 语句中都应该有一个计数器,这样我就可以为每个人更新它。我需要一个 System.out.println();打印实验的每一个结果。
  4. 使用先前确定的计数器打印实验的最终结果

编辑:我试着改变大家说的,现在看起来确实好多了,谢谢!但它仍然没有做它应该做的事情,我想知道为什么。我运行代码,但只得到一个输出;不是我希望它运行的 300 次。此外,最后的计数器不保存有关谁获胜的信息,它们每次都会重置。有时两个人会赢,但这是不可能的。谁能澄清一下?

编辑:这是代码的另一个更新。我相信它现在确实运行了 300 次!现在的问题是输出。有时它说; 1 伯尼获胜,而伯尼显然至少需要 2 个结果才能获胜。此外,它说 1 Penny 获胜,但这也不应该是可能的。我在 if 语句中搞砸了吗?

import java.util.Random;

public class Assignment3e
{
public static void main(String[] args)
{
int counter1 = 0;
int counter2 = 0;
int counter3 = 0;

Random coin = new Random();


for(int i = 0; i <= 300; i++){
int headCount = 0;
int tailsCount = 0;
for(int coinToss = 0; coinToss <= 3; coinToss++){
int random = (int) (Math.random() * 6) + 1;
String binary = Integer.toBinaryString(random);

boolean result = coin.nextBoolean();
if(result){
headCount++;
}
else{
tailsCount++;
}
if(headCount == 2 && binary.length() % 2 ==0){
//Amy wins
counter1 = counter1 + 1;
System.out.println(binary + " Amy wins.");
}
else if(tailsCount == 2 && binary.length() % 2 == 0){
//Penny wins
counter2 = counter2 + 1;
System.out.println(binary + " Penny wins.");
}
else if(headCount == 2 || tailsCount == 2 && binary.length() % 2 != 0){
//Bernie wins
counter3 = counter3 + 1;
System.out.println(binary + " Bernie wins.");
}
}
}
System.out.println("Amy wins " + counter1 + " times.");
System.out.println("Penny wins " + counter2 + " times.");
System.out.println("Bernie wins " + counter3 + " times.");
}

}

最佳答案

你几乎做对了。

这部分不再相关,因为 OP 在评论中添加了要求。

Your second for loop only need to run a maximum of 3 times as there will be at least 2 heads or 2 tails, not 10.

Edit: you can do it with a maximun of 2 tosses: if there is 1 head and 1 tail, the winner is the 3rd player (Bernie)

Now, on each iteration, you can draw a random decimal number, between 0 and 1 and assume if it's over 0.5 it's a head so you increment the headCount, else you increment the tailCount. Then you can perform the test on the counters (and the number of tosses).

It's easier than using a binary String.

编辑:要回答您的评论:查看您在哪里初始化了 headCounttailCount。请记住,一旦赢了,就必须重置这些计数器。

由于这是作业,我不会发布代码:)

编辑:OP 只是添加一条评论,说明他需要打印导致每场比赛结果的顺序。

我们假设二进制 1 是头部,0 是尾部。如果 Bernie 获胜,您需要掷硬币 3 次才能知道顺序。所以转换成二进制字符串的整数值random只需要3位组成(1位=1折腾)。

random 只能取 0 到 7 之间的值。

当您一次获得所有值时,您不再需要 coinToss for 循环。您需要做的就是检查二进制字符串的开头是否匹配任何获胜模式(11 表示 2 个正面,00 表示 2 个反面,否则伯尼获胜)

关于java - Java中的投币模拟/游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32727200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com