【发布时间】:2015-12-20 00:58:48
【问题描述】:
我目前正在上一门技术上面向初学者的计算机科学课程,但我觉得他们给我的所有作业都比我能处理的复杂。
这个作业要求我做一个抛硬币的模拟。三个人玩游戏,每个人都有特定的获胜要求:
- 如果有 2 个结果头和总投掷次数,则获胜 甚至是
- 如果有 2 个结果反面且总投掷次数为偶数,则获胜
- 如果有 2 个结果为正面或反面且掷骰总数为奇数,则获胜
我应该做 300 次实验。每次我都应该确定三个人中谁赢了,赢了多少次。我真的被困住了。我几乎没有任何代码,但我对代码应该是什么样子有一个非常基本的想法,但我无法将它放入 Java 语言中。
对于我的作业,我需要显示导致某人获胜的二进制序列。
我的想法:
- 为每个人初始化一个计数器(1、2、3),以便我可以跟踪他们赢了多少次
- 初始化头数和尾数以跟踪随机生成的序列
- 实际上整个实验都使用 for 循环。应该有一个外部循环定义实验应该运行 300 次,内部循环应该包含检查谁获胜的 if 语句。每个 if 语句中都应该有一个计数器,以便我可以为每个人更新它。我需要一个 System.out.println();打印实验的每一个结果。
- 使用先前确定的计数器打印实验的最终结果
编辑: 我试图改变大家所说的,现在看起来更好了,谢谢!但它仍然没有做它应该做的事情,我想知道为什么。我运行代码,我只得到一个输出;不是我希望它运行的 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.");
}
}
【问题讨论】:
-
所以你想基本上停止
for循环?您可以为此使用 break -
如果您使用
Math.random()并且从不使用dice,则您不会使用Random dice -
删除这个无用的二进制字符串。并使用
coinTossvalue,而不是binary.length(),这没有意义 -
我尝试删除二进制字符串,但它不起作用。对于我的任务,我需要显示导致一个人获胜的二进制序列。因此,如果我删除二进制文件,我将无法再显示它。另外,我不确定头/尾计数器是否正常工作。
-
我编辑了我的答案和您的问题以添加此要求。
标签: java simulation